2018-04-13 23:01:40 +00:00
|
|
|
use std::{
|
|
|
|
error::Error,
|
|
|
|
fmt::{
|
|
|
|
Display,
|
|
|
|
Formatter,
|
|
|
|
Result as FmtResult
|
|
|
|
},
|
|
|
|
io::Error as IoError
|
|
|
|
};
|
|
|
|
|
|
|
|
use ebml::EbmlError;
|
|
|
|
|
|
|
|
#[derive(Debug)]
|
|
|
|
pub enum WebmetroError {
|
|
|
|
EbmlError(EbmlError),
|
|
|
|
IoError(IoError),
|
2018-04-13 22:53:34 +00:00
|
|
|
Unknown(Box<Error + Send>)
|
2018-04-13 23:01:40 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
impl Display for WebmetroError {
|
|
|
|
fn fmt(&self, f: &mut Formatter) -> FmtResult {
|
|
|
|
match self {
|
|
|
|
&WebmetroError::EbmlError(ref err) => err.fmt(f),
|
|
|
|
&WebmetroError::IoError(ref err) => err.fmt(f),
|
|
|
|
&WebmetroError::Unknown(ref err) => err.fmt(f),
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
impl Error for WebmetroError {
|
|
|
|
fn description(&self) -> &str {
|
|
|
|
match self {
|
|
|
|
&WebmetroError::EbmlError(ref err) => err.description(),
|
|
|
|
&WebmetroError::IoError(ref err) => err.description(),
|
|
|
|
&WebmetroError::Unknown(ref err) => err.description(),
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
impl From<EbmlError> for WebmetroError {
|
|
|
|
fn from(err: EbmlError) -> WebmetroError {
|
|
|
|
WebmetroError::EbmlError(err)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
impl From<IoError> for WebmetroError {
|
|
|
|
fn from(err: IoError) -> WebmetroError {
|
|
|
|
WebmetroError::IoError(err)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2018-04-13 22:53:34 +00:00
|
|
|
impl From<Box<Error + Send>> for WebmetroError {
|
|
|
|
fn from(err: Box<Error + Send>) -> WebmetroError {
|
2018-04-13 23:01:40 +00:00
|
|
|
WebmetroError::Unknown(err)
|
|
|
|
}
|
|
|
|
}
|
2018-04-15 02:34:46 +00:00
|
|
|
|
|
|
|
impl<'a> From<&'a str> for WebmetroError {
|
|
|
|
fn from(err: &'a str) -> WebmetroError {
|
|
|
|
let error: Box<Error + Send + Sync> = err.into();
|
|
|
|
WebmetroError::Unknown(error)
|
|
|
|
}
|
|
|
|
}
|