aboutsummaryrefslogtreecommitdiff
path: root/lockchain-core/src/errors/mod.rs
diff options
context:
space:
mode:
authorKatharina Fey <kookie@spacekookie.de>2018-07-09 10:43:38 +0200
committerKatharina Fey <kookie@spacekookie.de>2018-07-09 10:43:38 +0200
commit99ccbd7ddc1917dc2c984b046e250bf74e0aa2d3 (patch)
tree6249a2f13c8b7bec195d20a0cf1b4cc264b2f64e /lockchain-core/src/errors/mod.rs
parent7bf79304628e5e95b20690f1a12cd9e5aec107bf (diff)
Refactoring the error modules to now contain sub-error types
This isn't ideal yet but good enough for now. Errors can be added via a new variant in lockchain::errors::Error easily
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(),
+ }
+ )
+ }
+}