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}