common_error/
handle_error_macro.rs

1
2/// [handle_error] 通用的msg处理方式实现error throw 的代码优雅程度。
3///
4/// # Example
5///
6/// ```no_run
7///
8/// struct LOC00007;
9/// fn main(){
10///     common_error::handle_error!(result: Result::Ok(""), etype: LOC00007, "x".clone() ,"y".clone());
11/// }
12///
13/// ```
14///
15
16#[macro_export]
17macro_rules! handle_error {
18    (result: $result:expr, panic:$xx:expr, etype: $etype:ty , $($arg:tt)*)=> {
19       match $result {
20           Ok(re) => {re}
21           Err(err) => {
22                let (_, msg) =<$etype>::throw($($arg)*,err.to_string().as_str());
23                tracing::error!(msg);
24                panic!($xx);
25           }
26       }
27    };
28    (result: $result:expr, panic:$xx:expr, etype: $etype:ty , $($arg:expr)*)=> {
29       match $result {
30           Ok(re) => {re}
31           Err(err) => {
32                let (_, msg) =<$etype>::throw($($arg)*,err.to_string().as_str());
33                tracing::error!(msg);
34                panic!($xx);
35           }
36       }
37    };
38
39    (result: $result:expr,  etype: $etype:ty , $($arg:tt)*)=> {
40       match $result {
41           Ok(re) => {re}
42           Err(err) => {
43                let (err, msg) =<$etype>::throw($($arg)*,err.to_string().as_str());
44                tracing::error!(msg);
45                return Err(err);
46           }
47       }
48    };
49        (result: $result:expr,  etype: $etype:ty , $($arg:expr)*)=> {
50       match $result {
51           Ok(re) => {re}
52           Err(err) => {
53                let (err, msg) =<$etype>::throw($($arg)*,err.to_string().as_str());
54                tracing::error!(msg);
55                return Err(err);
56           }
57       }
58    };
59}