diff options
author | Matthias Beyer <mail@beyermatthias.de> | 2016-04-18 19:51:51 +0200 |
---|---|---|
committer | Matthias Beyer <mail@beyermatthias.de> | 2016-04-18 19:51:51 +0200 |
commit | 8661842deca33df977d976f787c286cee27e7e2a (patch) | |
tree | d3b4c42a8121446744e8421ee79a21fd9829fc30 /libimagentryview | |
parent | 2d3e8ae47928963dc2aafcb50876c56d3acbcc32 (diff) |
Add error module
Diffstat (limited to 'libimagentryview')
-rw-r--r-- | libimagentryview/src/error.rs | 80 |
1 files changed, 80 insertions, 0 deletions
diff --git a/libimagentryview/src/error.rs b/libimagentryview/src/error.rs new file mode 100644 index 00000000..108529cc --- /dev/null +++ b/libimagentryview/src/error.rs @@ -0,0 +1,80 @@ +use std::error::Error; +use std::fmt::Error as FmtError; +use std::clone::Clone; +use std::fmt::{Display, Formatter}; + +/** + * Kind of error + */ +#[derive(Clone, Copy, Debug, PartialEq)] +pub enum ViewErrorKind { +} + +fn counter_error_type_as_str(e: &ViewErrorKind) -> &'static str { + match e { + _ => "", + } +} + +impl Display for ViewErrorKind { + + fn fmt(&self, fmt: &mut Formatter) -> Result<(), FmtError> { + try!(write!(fmt, "{}", counter_error_type_as_str(self))); + Ok(()) + } + +} + +/** + * Store error type + */ +#[derive(Debug)] +pub struct ViewError { + err_type: ViewErrorKind, + cause: Option<Box<Error>>, +} + +impl ViewError { + + /** + * Build a new ViewError from an ViewErrorKind, optionally with cause + */ + pub fn new(errtype: ViewErrorKind, cause: Option<Box<Error>>) + -> ViewError + { + ViewError { + err_type: errtype, + cause: cause, + } + } + + /** + * Get the error type of this ViewError + */ + pub fn err_type(&self) -> ViewErrorKind { + self.err_type.clone() + } + +} + +impl Display for ViewError { + + fn fmt(&self, fmt: &mut Formatter) -> Result<(), FmtError> { + try!(write!(fmt, "[{}]", counter_error_type_as_str(&self.err_type.clone()))); + Ok(()) + } + +} + +impl Error for ViewError { + + fn description(&self) -> &str { + counter_error_type_as_str(&self.err_type.clone()) + } + + fn cause(&self) -> Option<&Error> { + self.cause.as_ref().map(|e| &**e) + } + +} + |