err_logging/
error_logging.rs1pub trait ErrorLogging {
2 type ResultType;
3
4 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), file!(), line!(), )
38 };
39 () => {
40 (
41 None, file!(), line!(), )
45 };
46}
47