#![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_iter() {
let ec: DynError = DynError::new(SeperateError::SomethingHappened);
let ec: DynError = ec.chain(OtherError::Extreme).into();
let ec: DynError = ec.chain(TestError::Bar).into();
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);
}
#[test]
#[should_panic(expected = "cannot chain unlinked error categories: optional name(2): Summary")]
fn test_chain_panic() {
let err: DynError = TestError::Bar.into();
err.chain(OtherError::Extreme);
}