aboutsummaryrefslogtreecommitdiff
path: root/lockchain-core/src/errors/mod.rs
diff options
context:
space:
mode:
Diffstat (limited to 'lockchain-core/src/errors/mod.rs')
-rw-r--r--lockchain-core/src/errors/mod.rs55
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(),
+ }
+ )
+ }
+}