epitaph 0.2.0

Types and macros for more detailed errors.
Documentation


#[macro_use]
extern crate epitaph;

use std::error::Error as StdError;

use epitaph::DetailedError;


fn success_func () -> Result<i32, Error>
{
    Ok(5)
}
fn fail_func () -> Result<i32, Error>
{
    err!(ErrorKind::ErrorOne; "Error One");
}


#[derive(Clone, PartialEq, Eq, Debug)]
pub enum ErrorKind
{
    ErrorOne,
    ErrorTwo,
    ErrorThree,
}

error_items!{Error<Kind = ErrorKind> "Test Error"}

#[test]
fn funcs ()
{
    fn funcs_impl <F> (f : F)
        where F : FnOnce(Result<i32, Error>)
    {
        f_attempt!((f) success_func());
        f_attempt!((f) success_func() => "Description");
        f_attempt!((f) success_func() => "Description with arg {}", 5);
        f_attempt!((f; ()) success_func());
        f_attempt!((f; ()) success_func() => "Description");
        f_attempt!((f; ()) success_func() => "Description with arg {}", 5);

        f_attempt_err!((f) success_func() => |_| ErrorKind::ErrorOne; "Description");
        f_attempt_err!((f) success_func() => |_| ErrorKind::ErrorOne; "Description with arg {}", 5);
        f_attempt_err!((f) success_func() => |_| ErrorKind::ErrorOne, |_| epitaph::StringErr::from_str("inner error"); "Description");
        f_attempt_err!((f) success_func() => |_| ErrorKind::ErrorOne, |_| epitaph::StringErr::from_str("inner error"); "Description with arg {}", 5);
        f_attempt_err!((f; ()) success_func() => |_| ErrorKind::ErrorOne; "Description");
        f_attempt_err!((f; ()) success_func() => |_| ErrorKind::ErrorOne; "Description with arg {}", 5);
        f_attempt_err!((f; ()) success_func() => |_| ErrorKind::ErrorOne, |_| epitaph::StringErr::from_str("inner error"); "Description");
        f_attempt_err!((f; ()) success_func() => |_| ErrorKind::ErrorOne, |_| epitaph::StringErr::from_str("inner error"); "Description with arg {}", 5);
    }

    funcs_impl(|_| ());
}