diff options
Diffstat (limited to 'lockchain-core/src/errors/mod.rs')
-rw-r--r-- | lockchain-core/src/errors/mod.rs | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/lockchain-core/src/errors/mod.rs b/lockchain-core/src/errors/mod.rs new file mode 100644 index 0000000..d6347a1 --- /dev/null +++ b/lockchain-core/src/errors/mod.rs @@ -0,0 +1,55 @@ +//! Common lockchain error handling +//! +//! `Error` is a wrapper type around many different errors +//! that are provided by different parts of +//! the `lockchain-core` crate. +//! +//! It also re-exports those error types so that a user can use +//! the error handling module simply by including `lockchain_core::errors::*` + +mod auth; +mod crypto; +mod data; +mod vault; + +pub use self::auth::Error as AuthError; +pub use self::crypto::Error as CryptoError; +pub use self::data::Error as DataError; +pub use self::vault::Error as VaultError; + +use std::error::Error as StdError; +use std::fmt::{Display, Formatter, Result}; + +#[derive(Debug, Serialize, Deserialize)] +pub enum Error { + /// A basic vault operation error + Vault(VaultError), + /// Errors occuring during authentication + Auth(AuthError), + /// Cryptographic errors + Crypto(CryptoError), + /// Data integrity or retrieval errors + Data(DataError), + /// Make sure we don't break user code with new options + #[doc(hidden)] + __NonExhaustive, +} + +impl StdError for Error {} + +impl Display for Error { + fn fmt(&self, f: &mut Formatter) -> Result { + use self::Error::*; + write!( + f, + "{}", + match self { + Vault(ee) => format!("VaultError: {}", ee), + Auth(ee) => format!("AuthError: {}", ee), + Crypto(ee) => format!("CryptoError: {}", ee), + Data(ee) => format!("DataError: {}", ee), + _ => "Unknown error".into(), + } + ) + } +} |