Maraiah/src/durandal/err.rs

64 lines
1.1 KiB
Rust

//! Error handling.
pub use failure::{Error, Fail};
use std::fmt;
macro_rules! ok {
($v:expr, $msg:expr) => {
match $v {
Some(v) => Ok(v),
None => Err(err_msg($msg)),
}
};
}
macro_rules! bail {
($e:expr) => {
return Err(err_msg($e));
};
}
pub fn err_msg(msg: &'static str) -> Error {Error::from(ErrMsg(msg))}
impl Fail for ReprError {}
impl Fail for ErrMsg {}
impl fmt::Display for ReprError
{
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result
{
write!(f, "representation error (got {})", self.0)
}
}
impl fmt::Debug for ReprError
{
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result
{
fmt::Display::fmt(self, f)
}
}
impl fmt::Display for ErrMsg
{
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {f.write_str(self.0)}
}
impl fmt::Debug for ErrMsg
{
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result
{
fmt::Display::fmt(self, f)
}
}
#[derive(PartialEq)]
pub struct ReprError(pub i64);
struct ErrMsg(&'static str);
pub type ResultS<T> = Result<T, Error>;
// EOF