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>;