kuma_client/
util.rs

1use log::{debug, error, info, trace, warn};
2
3pub trait ResultLogger<F> {
4    fn log_trace(self, target: &str, cb: F) -> Self;
5    fn log_debug(self, target: &str, cb: F) -> Self;
6    fn log_info(self, target: &str, cb: F) -> Self;
7    fn log_warn(self, target: &str, cb: F) -> Self;
8    fn log_error(self, target: &str, cb: F) -> Self;
9    fn print_error(self, cb: F) -> Self;
10}
11
12impl<F, S, T, E> ResultLogger<F> for std::result::Result<T, E>
13where
14    S: AsRef<str>,
15    F: FnOnce(&E) -> S,
16{
17    fn log_trace(self, target: &str, cb: F) -> Self {
18        return self.map_err(|e| {
19            trace!(target: target, "{}", cb(&e).as_ref());
20            e
21        });
22    }
23
24    fn log_debug(self, target: &str, cb: F) -> Self {
25        return self.map_err(|e| {
26            debug!(target: target, "{}", cb(&e).as_ref());
27            e
28        });
29    }
30
31    fn log_info(self, target: &str, cb: F) -> Self {
32        return self.map_err(|e| {
33            info!(target: target, "{}", cb(&e).as_ref());
34            e
35        });
36    }
37
38    fn log_warn(self, target: &str, cb: F) -> Self {
39        return self.map_err(|e| {
40            warn!(target: target, "{}", cb(&e).as_ref());
41            e
42        });
43    }
44
45    fn log_error(self, target: &str, cb: F) -> Self {
46        return self.map_err(|e| {
47            error!(target: target, "{}", cb(&e).as_ref());
48            e
49        });
50    }
51
52    fn print_error(self, cb: F) -> Self {
53        return self.map_err(|e| {
54            println!("{}", cb(&e).as_ref());
55            e
56        });
57    }
58}
59
60impl<F, S, T> ResultLogger<F> for Option<T>
61where
62    S: AsRef<str>,
63    F: FnOnce() -> S,
64{
65    fn log_trace(self, target: &str, cb: F) -> Self {
66        if self.is_none() {
67            trace!(target: target, "{}", cb().as_ref())
68        }
69        self
70    }
71
72    fn log_debug(self, target: &str, cb: F) -> Self {
73        if self.is_none() {
74            debug!(target: target, "{}", cb().as_ref())
75        }
76        self
77    }
78
79    fn log_info(self, target: &str, cb: F) -> Self {
80        if self.is_none() {
81            info!(target: target, "{}", cb().as_ref())
82        }
83        self
84    }
85
86    fn log_warn(self, target: &str, cb: F) -> Self {
87        if self.is_none() {
88            warn!(target: target, "{}", cb().as_ref())
89        }
90        self
91    }
92
93    fn log_error(self, target: &str, cb: F) -> Self {
94        if self.is_none() {
95            error!(target: target, "{}", cb().as_ref())
96        }
97        self
98    }
99
100    fn print_error(self, cb: F) -> Self {
101        if self.is_none() {
102            println!("{}", cb().as_ref())
103        }
104        self
105    }
106}
107
108#[macro_export]
109macro_rules! default_from_serde {
110    ($struct_name:ident) => {
111        impl Default for $struct_name {
112            fn default() -> Self {
113                serde_json::from_value(serde_json::json!({})).unwrap()
114            }
115        }
116
117        impl $struct_name {
118            pub fn new() -> Self {
119                Default::default()
120            }
121        }
122    };
123}