error-chain-mini 0.2.0

error-chain for minimalist
Documentation
#[macro_use]
extern crate error_chain_mini_derive;
extern crate error_chain_mini;

use error_chain_mini::*;
#[test]
fn short_enum() {
    #[derive(ErrorKind)]
    enum MyError {
        #[msg(short = "error kind 1")]
        Kind1,
        #[msg(short = "error kind 2")]
        Kind2,
    }
    assert_eq!(MyError::Kind1.short(), "error kind 1");
    assert_eq!(MyError::Kind2.short(), "error kind 2");
}

#[test]
fn nomsg_enum() {
    #[derive(ErrorKind)]
    enum MyError {
        Kind1,
        Kind2,
    }
    assert_eq!(MyError::Kind1.short(), "MyError::Kind1");
    assert_eq!(MyError::Kind2.short(), "MyError::Kind2");
}

#[test]
fn detailed_enum_1() {
    #[derive(ErrorKind)]
    enum MyError {
        #[msg(short = "MyError1", detailed = "value: {}", _0)]
        Kind1(usize),
        #[msg(short = "MyError2")]
        Kind2,
    }
    assert_eq!(MyError::Kind2.short(), "MyError2");
    assert_eq!(MyError::Kind1(3).detailed(), "value: 3");
}

#[test]
fn detailed_enum_2() {
    #[derive(ErrorKind)]
    enum MyError {
        #[msg(short = "MyError1", detailed = "value: {}", idx)]
        Kind1 { idx: usize },
        #[msg(short = "MyError2", detailed = "info1: {} info2: {}", info1, info2)]
        Kind2 { info1: usize, info2: &'static str },
    }
    assert_eq!(MyError::Kind1 { idx: 3 }.detailed(), "value: 3");
    assert_eq!(
        MyError::Kind2 {
            info1: 3,
            info2: "hoge"
        }.detailed(),
        "info1: 3 info2: hoge"
    );
}

#[test]
fn detailed_enum_rev() {
    #[derive(ErrorKind)]
    enum MyError {
        #[msg(detailed = "value: {}", _0, short = "MyError1")]
        Kind1(usize),
        #[msg(short = "MyError2")]
        Kind2,
    }
    assert_eq!(MyError::Kind2.short(), "MyError2");
    assert_eq!(MyError::Kind1(3).detailed(), "value: 3");
}

#[test]
fn short_struct() {
    #[derive(ErrorKind)]
    #[msg(short = "My Error")]
    struct MyError;
    assert_eq!(MyError {}.short(), "My Error");
}

#[test]
fn detailed_struct() {
    #[derive(ErrorKind)]
    #[msg(short = "My Error", detailed = "{}", _0)]
    struct MyError(usize);
    assert_eq!(MyError(5).full(), "My Error { 5 }");
}

#[test]
fn nomsg_struct() {
    #[derive(ErrorKind)]
    struct MyError;
    assert_eq!(MyError {}.short(), "MyError");
}

#[test]
#[ignore]
fn display() {
    #[derive(ErrorKind)]
    enum MyError {
        #[msg(short = "MyError1", detailed = "value: {}", _0)]
        Kind1(usize),
        #[msg(short = "MyError2")]
        Kind2,
    }
    #[derive(ErrorKind)]
    enum MyError2 {
        #[msg(short = "MyError", detailed = "{}", _0)]
        MyError(MyError),
    }
    let chained = MyError::Kind1(5).into_with(|| "error 1 was caused");
    let chained = chained
        .convert_with(|e| MyError2::MyError(e))
        .chain(|| "error 2 was caused");
    println!("{}", chained);
}