err_logging/
error_logging.rs

1pub trait ErrorLogging {
2    type ResultType;
3
4    /// uuid, file, line
5    fn elog(self, ctx: (Option<&str>, &str, u32)) -> Self::ResultType;
6}
7
8impl<T, E> ErrorLogging for Result<T, E>
9where
10    E: std::fmt::Debug,
11{
12    type ResultType = Result<T, E>;
13
14    fn elog(self, ctx: (Option<&str>, &str, u32)) -> Self::ResultType {
15        self.map_err(|err| {
16
17            let (uid, file, line) = ctx;
18
19            if let Some(uid) = uid {
20                log::error!("[ <{uid}> | <{file}> | <{line}> ] - [{err:?}]");
21            } else {
22                log::error!("[ <{file}> | <{line}> ] - [{err:?}]");
23            }
24
25            err
26        })
27    }
28}
29
30#[macro_export]
31macro_rules! ctx {
32    ($uid:expr) => {
33        (
34            Some($uid),     // uid
35            file!(),        // cur file
36            line!(),        // cur line
37        )
38    };
39    () => {
40        (
41            None,    // no uid
42            file!(), // cur file
43            line!(), // cur line
44        )
45    };
46}
47