dzgt_utils/
error_util.rs

1use cyfs_base::{BuckyError, BuckyErrorCode};
2use sfo_http::errors::ErrorCode;
3
4#[macro_export]
5macro_rules! app_err {
6    ( $err: expr, $($arg:tt)*) => {
7        {
8            log::error!("{} {}", stringify!($err), format!($($arg)*));
9            cyfs_base::BuckyError::new(cyfs_base::BuckyErrorCodeEx::DecError($err), format!("app_code_err:{} msg:{}", stringify!($err), format!($($arg)*)))
10        }
11    };
12}
13
14#[macro_export]
15macro_rules! cyfs_err {
16    ( $err: expr, $($arg:tt)*) => {
17        {
18            log::error!("{}", format!($($arg)*));
19            cyfs_base::BuckyError::new($err, format!("msg:{}", format!($($arg)*)))
20        }
21    };
22}
23
24#[macro_export]
25macro_rules! into_cyfs_err {
26    ($err: expr) => {
27        |e| {
28            log::error!("err:{:?}", e);
29            cyfs_base::BuckyError::new($err, format!("err {}", e))
30        }
31    };
32    ($err: expr, $($arg:tt)*) => {
33        |e| {
34            log::error!("{} err:{:?}", format!($($arg)*), e);
35            cyfs_base::BuckyError::new($err, format!("{} err {}", format!($($arg)*), e))
36        }
37    };
38}
39
40#[macro_export]
41macro_rules! into_app_err {
42    ($err: expr) => {
43        |e| {
44            log::error!("{} err:{:?}", stringify!($err), e);
45            cyfs_base::BuckyError::new(cyfs_base::BuckyErrorCodeEx::DecError($err), format!("app_code_err:{} err {}", stringify!($err), e))
46        }
47    };
48    ($err: expr, $($arg:tt)*) => {
49        |e| {
50            log::error!("{} {} err:{:?}", stringify!($err), format!($($arg)*), e);
51            cyfs_base::BuckyError::new(cyfs_base::BuckyErrorCodeEx::DecError($err), format!("app_code_err:{} {} err {}", stringify!($err), format!($($arg)*), e))
52        }
53    };
54}
55
56#[macro_export]
57macro_rules! log_err {
58    () => {
59        |e| {
60            log::error!("err:{:?}", e);
61        }
62    };
63    ($($arg:tt)*) => {
64        |e| {
65            log::error!("{} err:{:?}", format!($($arg)*), e);
66        }
67    };
68}
69
70#[macro_export]
71macro_rules! into_bucky_err {
72    () => {
73        |e| {
74            log::error!("err:{:?}", e);
75            e.into_bucky_error("")
76        }
77    };
78    ($($arg:tt)*) => {
79        |e| {
80            log::error!("{} err:{:?}", format!($($arg)*), e);
81            e.into_bucky_error(format!($($arg)*))
82        }
83    };
84}
85
86pub trait IntoBuckyError {
87    fn into_bucky_error(self, msg: impl Into<String>) -> BuckyError;
88}
89
90impl IntoBuckyError for sfo_http::errors::Error {
91    fn into_bucky_error(self, msg: impl Into<String>) -> BuckyError {
92        match self.code() {
93            ErrorCode::Failed => {
94                BuckyError::new(BuckyErrorCode::Failed, format!("{} {}", msg.into(), self.msg()))
95            }
96            ErrorCode::InvalidData => {
97                BuckyError::new(BuckyErrorCode::InvalidData, format!("{} {}", msg.into(), self.msg()))
98            }
99            ErrorCode::ConnectFailed => {
100                BuckyError::new(BuckyErrorCode::ConnectFailed, format!("{} {}", msg.into(), self.msg()))
101            }
102            ErrorCode::InvalidParam => {
103                BuckyError::new(BuckyErrorCode::InvalidParam, format!("{} {}", msg.into(), self.msg()))
104            }
105        }
106    }
107}
108
109impl IntoBuckyError for sfo_http::token_helper::errors::Error {
110    fn into_bucky_error(self, msg: impl Into<String>) -> BuckyError {
111        if self.kind() == &sfo_http::token_helper::errors::ErrorKind::ExpiredSignature {
112            BuckyError::new(BuckyErrorCode::Expired, format!("{} {}", msg.into(), self))
113        } else {
114            BuckyError::new(BuckyErrorCode::Failed, format!("{} {}", msg.into(), self))
115        }
116    }
117}
118
119impl IntoBuckyError for serde_json::Error {
120    fn into_bucky_error(self, msg: impl Into<String>) -> BuckyError {
121        BuckyError::new(BuckyErrorCode::Failed, format!("{} {}", msg.into(), self))
122    }
123}
124
125impl IntoBuckyError for tide::Error {
126    fn into_bucky_error(self, msg: impl Into<String>) -> BuckyError {
127        BuckyError::new(BuckyErrorCode::Failed, format!("{} {}", msg.into(), self))
128    }
129}
130
131impl IntoBuckyError for std::io::Error {
132    fn into_bucky_error(self, msg: impl Into<String>) -> BuckyError {
133        BuckyError::new(BuckyErrorCode::Failed, format!("{} {}", msg.into(), self))
134    }
135}
136
137pub fn get_app_err_code(ret: &BuckyError) -> u16 {
138    if let BuckyErrorCode::DecError(code) = ret.code() {
139        code
140    } else {
141        u16::MAX
142    }
143}