1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
pub trait DisplayError {
    fn format(&self, w: &mut dyn std::io::Write) -> std::io::Result<()>;
}

pub type Error = Box<dyn DisplayError>;
pub type Result<T> = std::result::Result<T, Error>;

impl<E: DisplayError + 'static> From<E> for Error {
    fn from(e: E) -> Error {
        Box::new(e)
    }
}

pub trait DisplayErrorAuto {}

impl<E: std::fmt::Display + DisplayErrorAuto> DisplayError for E {
    fn format(&self, w: &mut dyn std::io::Write) -> std::io::Result<()> {
        write!(w, "{}", self)
    }
}

impl DisplayErrorAuto for xmltree::ParseError {}
impl DisplayErrorAuto for xmltree::Error {}
impl DisplayErrorAuto for std::io::Error {}
impl DisplayErrorAuto for std::num::ParseIntError {}
impl DisplayErrorAuto for std::num::TryFromIntError {}
impl DisplayErrorAuto for svd_rs::SvdError {}
impl DisplayErrorAuto for svd_encoder::EncodeError {}