Skip to main content

spectrum/emit/
error.rs

1use std::{error, fmt, io};
2
3#[derive(Debug)]
4pub enum EmitError {
5    Error(Box<dyn error::Error + Send + Sync + 'static>),
6}
7
8impl EmitError {
9    pub fn new(err: impl error::Error + Send + Sync + 'static) -> EmitError {
10        EmitError::Error(Box::new(err))
11    }
12}
13
14impl fmt::Display for EmitError {
15    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
16        match self {
17            EmitError::Error(err) => write!(f, "{}", err),
18        }
19    }
20}
21
22impl error::Error for EmitError {}
23
24impl From<EmitError> for fmt::Error {
25    fn from(_: EmitError) -> Self {
26        fmt::Error
27    }
28}
29
30impl From<EmitError> for io::Error {
31    fn from(err: EmitError) -> Self {
32        io::Error::new(io::ErrorKind::Other, err)
33    }
34}
35
36macro_rules! emit_error {
37    ($ty:ty) => {
38        impl From<$ty> for EmitError {
39            fn from(err: $ty) -> EmitError {
40                EmitError::new(err)
41            }
42        }
43    };
44}
45
46emit_error!(fmt::Error);
47emit_error!(io::Error);
48
49pub type EmitResult<T = ()> = Result<T, EmitError>;