diff options
Diffstat (limited to 'src/error.rs')
| -rw-r--r-- | src/error.rs | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/src/error.rs b/src/error.rs new file mode 100644 index 0000000..3e6a66e --- /dev/null +++ b/src/error.rs @@ -0,0 +1,54 @@ +use hyper::Error as HyperError; +use serde_json::Error as JsonError; +use serde_urlencoded::ser::Error as UrlEncodeError; +use std::error::Error as StdError; +use std::fmt::{Display, Formatter, Result as FmtResult}; +use std::result::Result as StdResult; + +/// Result type used throughout the library's public result functions. +pub type Result<T> = StdResult<T, Error>; + +/// Standard error enum used to wrap different potential error types. +#[derive(Debug)] +pub enum Error { + /// An error from the `hyper` crate. + Hyper(HyperError), + /// An error from the `serde_json` crate. + Json(JsonError), + /// An error from the `serde_urlencoded` crate. + UrlEncode(UrlEncodeError), +} + +impl From<HyperError> for Error { + fn from(err: HyperError) -> Self { + Error::Hyper(err) + } +} + +impl From<JsonError> for Error { + fn from(err: JsonError) -> Self { + Error::Json(err) + } +} + +impl From<UrlEncodeError> for Error { + fn from(err: UrlEncodeError) -> Self { + Error::UrlEncode(err) + } +} + +impl Display for Error { + fn fmt(&self, f: &mut Formatter) -> FmtResult { + f.write_str(self.description()) + } +} + +impl StdError for Error { + fn description(&self) -> &str { + match *self { + Error::Hyper(ref inner) => inner.description(), + Error::Json(ref inner) => inner.description(), + Error::UrlEncode(ref inner) => inner.description(), + } + } +} |