error-rules 1.0.1

Archived! Error handling without pain
Documentation
use error_rules::*;


#[test]
fn test_error_kind_wo_arg() {
    #[derive(Debug, Error)]
    enum E {
        #[error_kind("custom")]
        Custom,
    }

    assert_eq!(E::Custom.to_string().as_str(), "custom");
}


#[test]
fn test_error_kind_w1_arg() {
    #[derive(Debug, Error)]
    enum E {
        #[error_kind("custom:{}", 0)]
        Custom(usize),
    }

    assert_eq!(E::Custom(100).to_string().as_str(), "custom:100");
}


#[test]
fn test_error_kind_w2_arg() {
    #[derive(Debug, Error)]
    enum E {
        #[error_kind("custom:{}:{}", 0, 1)]
        Custom(usize, usize),
    }

    assert_eq!(E::Custom(100, 200).to_string().as_str(), "custom:100:200");
}


#[test]
fn test_error_from() {
    use std::io;

    #[derive(Debug, Error)]
    enum E {
        #[error_from("io:{}", 0)]
        Io(io::Error),
    }

    let e = E::Io(io::Error::from(io::ErrorKind::PermissionDenied));
    assert_eq!(e.to_string().as_str(), "io:permission denied");
    assert_eq!(std::error::Error::source(&e).unwrap().to_string().as_str(), "permission denied");
}


#[test]
fn test_error_from_wo_attrs() {
    use std::io;

    #[derive(Debug, Error)]
    enum E {
        #[error_from]
        Io(io::Error),
    }

    let e: E = io::Error::from(io::ErrorKind::PermissionDenied).into();
    assert_eq!(e.to_string().as_str(), "permission denied");
}


#[test]
fn test_error_prefix() {
    use std::io;

    #[derive(Debug, Error)]
    #[error_prefix = "App"]
    enum E {
        #[error_from]
        Io(io::Error),
    }

    let e: E = io::Error::from(io::ErrorKind::PermissionDenied).into();
    assert_eq!(e.to_string().as_str(), "App: permission denied");
}