#![allow(dead_code)]
use embedded_error_chain::*;
#[derive(Clone, Copy, ErrorCategory)]
#[error_category(links(SeperateError))]
#[repr(u8)]
enum OtherError {
Extreme = 4,
}
const SOME_GLOBAL_VARIABLE: usize = 5;
#[derive(Clone, Copy, ErrorCategory)]
#[error_category(name = "optional name", links(OtherError))]
#[repr(u8)]
enum TestError {
#[error("format string {summary}, {details}, {variant}, {category}")]
Foo,
#[error("custom {}, {:?}", "some_expr", SOME_GLOBAL_VARIABLE)]
Other,
Bar,
}
#[derive(Clone, Copy, ErrorCategory)]
#[error_category(links(OtherError, TestError))]
#[repr(u8)]
enum SeperateError {
#[error("{details}")]
SomethingHappened,
}
#[derive(Clone, Copy, ErrorCategory)]
enum YetEmptyError {}
#[test]
fn test() {
let ec = Error::new(SeperateError::SomethingHappened)
.chain(OtherError::Extreme)
.chain(TestError::Bar);
println!("{:?}", ec);
let mut iter = ec.iter();
assert_eq!(
iter.next(),
Some((
TestError::Bar.into(),
ErrorCategoryHandle::new::<TestError>()
))
);
assert_eq!(
iter.next(),
Some((
OtherError::Extreme.into(),
ErrorCategoryHandle::new::<OtherError>()
))
);
assert_eq!(
iter.next(),
Some((
SeperateError::SomethingHappened.into(),
ErrorCategoryHandle::new::<SeperateError>()
))
);
assert_eq!(iter.next(), None);
}