From 107624c5bb11e6ab8c72d85392f9645efd7c6545 Mon Sep 17 00:00:00 2001 From: "C. Morgan Hamill" Date: Fri, 20 Mar 2015 09:15:02 -0400 Subject: Add error module with crate's `Error` type. Implement `Display`, `Error`, and various `FromError` traits on `Error`, allowing the use of `try!` on the various `Result` types in the crate. Note that currently the only error variants are those thrown from a lower-level operation. --- src/error.rs | 47 +++++++++++++++++++++++++++++++++++++++++++++++ src/lib.rs | 2 ++ 2 files changed, 49 insertions(+) create mode 100644 src/error.rs (limited to 'src') diff --git a/src/error.rs b/src/error.rs new file mode 100644 index 0000000..57d636a --- /dev/null +++ b/src/error.rs @@ -0,0 +1,47 @@ +use std::{ + error, + fmt, + io, +}; + +use utils::NotmuchEnum; +use ffi; + +#[derive(Debug)] +pub enum Error { + IoError(io::Error), + NotmuchError(ffi::NotmuchStatus), +} + +impl fmt::Display for Error { + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { + write!(f, "{}", error::Error::description(self)) + } +} + +impl error::Error for Error { + fn description(&self) -> &str { + match *self { + Error::IoError(ref e) => error::Error::description(e), + Error::NotmuchError(ref e) => e.description(), + } + } +} + +impl error::FromError for Error { + fn from_error(err: io::Error) -> Error { + Error::IoError(err) + } +} + +impl error::FromError for Error { + fn from_error(err: ffi::NotmuchStatus) -> Error { + Error::NotmuchError(err) + } +} + +impl error::FromError for Error { + fn from_error(err: ffi::notmuch_status_t) -> Error { + Error::NotmuchError(ffi::NotmuchStatus::from_notmuch_t(err)) + } +} diff --git a/src/lib.rs b/src/lib.rs index f490df7..f7358b7 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -6,3 +6,5 @@ mod macros; mod ffi; mod utils; + +pub mod error; -- cgit v1.2.1