ct_tracker_lib/
errors.rs

1use std::fmt::{Debug, Display};
2
3pub use app_dirs::AppDirsError;
4pub use glob::{GlobError, GlobResult};
5pub use serde_json::{Error as JsonError, Result as JsonResult};
6pub use std::io::{Error as IoError, Result as IoResult};
7
8pub enum CtError {
9    IoError(IoError),
10    JsonError(JsonError),
11    ADError(AppDirsError),
12    GlobError(GlobError),
13    Own(&'static str),
14}
15
16impl From<IoError> for CtError {
17    fn from(e: IoError) -> Self {
18        CtError::IoError(e)
19    }
20}
21
22impl From<JsonError> for CtError {
23    fn from(e: JsonError) -> Self {
24        CtError::JsonError(e)
25    }
26}
27
28impl From<AppDirsError> for CtError {
29    fn from(e: AppDirsError) -> Self {
30        CtError::ADError(e)
31    }
32}
33
34impl From<GlobError> for CtError {
35    fn from(e: GlobError) -> Self {
36        CtError::GlobError(e)
37    }
38}
39
40impl From<&'static str> for CtError {
41    fn from(msg: &'static str) -> Self {
42        CtError::Own(msg)
43    }
44}
45
46impl Debug for CtError {
47    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
48        match self {
49            CtError::IoError(e) => write!(f, "IO Error: {}", e),
50            CtError::JsonError(e) => write!(f, "JSON Error: {}", e),
51            CtError::ADError(e) => write!(f, "Ad Error: {}", e),
52            CtError::GlobError(e) => write!(f, "Glob Error: {}", e),
53            CtError::Own(s) => write!(f, "CT Error: {}", s),
54        }
55    }
56}
57
58impl Display for CtError {
59    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
60        match self {
61            CtError::IoError(e) => write!(f, "IO Error: {}", e),
62            CtError::JsonError(e) => write!(f, "JSON Error: {}", e),
63            CtError::ADError(e) => write!(f, "Ad Error: {}", e),
64            CtError::GlobError(e) => write!(f, "Glob Error: {}", e),
65            CtError::Own(s) => write!(f, "CT Error: {}", s),
66        }
67    }
68}
69
70pub type CtResult<T> = Result<T, CtError>;
71pub type ADResult<T> = Result<T, app_dirs::AppDirsError>;