zbus_lib/err/
mod.rs

1use std::error::Error;
2use std::fmt::{
3    Debug, Display,
4};
5use std::sync::mpsc::RecvTimeoutError;
6use std::time::Duration;
7
8pub type ZbusResult<T> = Result<T, ZbusErr>;
9pub type OkResult = ZbusResult<()>;
10
11pub struct ZbusErr {
12    inner: ErrKind,
13}
14
15// pub enum ZbusErr {
16//     TimeOut(String),
17//     Closed,
18//     Err(String),
19//     Validate(String),
20// }
21impl ZbusErr {
22    pub fn new(inner: ErrKind) -> Self {
23        ZbusErr {
24            inner
25        }
26    }
27    pub fn err<E: Into<String>>(err: E) -> Self {
28        ZbusErr {
29            inner: ErrKind::Err(From::from(err.into()))
30        }
31    }
32    pub fn validate<E: Into<String>>(err: E) -> Self {
33        ZbusErr {
34            inner: ErrKind::Validate(From::from(err.into()))
35        }
36    }
37    pub fn time_out<E: Into<String>>(err: E, out_ms: i32) -> Self {
38        ZbusErr {
39            inner: ErrKind::TimeOut(From::from(err.into()), out_ms)
40        }
41    }
42    pub fn closed() -> Self {
43        ZbusErr {
44            inner: ErrKind::Closed
45        }
46    }
47}
48
49pub enum ErrKind {
50    TimeOut(String, i32),
51    Closed,
52    Validate(String),
53    Err(Box<dyn  Error + Send + Sync>),
54}
55
56impl Debug for ZbusErr {
57    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
58        match &self.inner {
59            ErrKind::TimeOut(ref msg, ms) => write!(f, "timeout{}={}ms", msg, ms),
60            ErrKind::Closed => write!(f, "rpc client closed {}", ""),
61            ErrKind::Validate(ref msg) => write!(f, "validate fail {}", msg),
62            ErrKind::Err(err) => write!(f, "{}", err.to_string()),
63        }
64    }
65}
66
67impl Display for ZbusErr {
68    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
69        match &self.inner {
70            ErrKind::TimeOut(ref msg, ms) => write!(f, "timeout{} {}ms", msg, ms),
71            ErrKind::Closed => Display::fmt("rpc client closed {}", f),
72            ErrKind::Validate(ref msg) => write!(f, "validate fail {}", msg),
73            ErrKind::Err(err) => write!(f, "{}", err.to_string()),
74        }
75    }
76}
77
78
79impl From<RecvTimeoutError> for ZbusErr {
80    fn from(err: RecvTimeoutError) -> Self {
81        ZbusErr::new(ErrKind::TimeOut(err.to_string(), -1))
82    }
83}
84
85
86impl<B> From<Box<B>> for ZbusErr
87    where
88        B: Error + Send + Sync + 'static,
89{
90    fn from(err: Box<B>) -> ZbusErr {
91        ZbusErr::new(ErrKind::Err(err))
92    }
93}
94
95impl From<serde_json::error::Error> for ZbusErr
96{
97    fn from(err: serde_json::error::Error) -> Self {
98        Self::new(ErrKind::Err(Box::new(err)))
99    }
100}