tihu_native/
errno.rs

1use tihu::api::Response;
2use tihu::SharedString;
3
4#[derive(thiserror::Error, Debug)]
5pub enum ErrNo {
6    #[error("用户未登录")]
7    LoginRequired,
8    #[error("{0}")]
9    CommonError(SharedString),
10    #[error("{0}")]
11    Other(#[from] anyhow::Error),
12    #[error("配置错误,{0}")]
13    ConfigError(SharedString),
14    #[error("任务超时,{0}")]
15    Timeout(SharedString),
16    #[error("没有可用的{0}服务")]
17    NoService(SharedString),
18    #[error("{0}服务忙")]
19    ServiceBusy(SharedString),
20    #[error("暂停服务")]
21    ServicePaused,
22    #[error("接口不存在")]
23    NoSuchApi,
24    #[error("序列化数据失败,{0}")]
25    SerializeError(serde_json::Error),
26    #[error("反序列化数据失败,{0}")]
27    DeserializeError(serde_json::Error),
28    #[error("调用远程接口失败,{0}")]
29    ApiError(anyhow::Error),
30    #[error("只支持UTF-8格式的数据")]
31    Utf8Only,
32    #[error("参数格式不正确")]
33    ParamFormatError,
34    #[error("参数无效,{0}")]
35    ParamInvalid(SharedString),
36    #[error("令牌无效")]
37    TokenInvalid,
38    #[error("没有权限")]
39    NotAllowed,
40    #[error("访问太频繁")]
41    TooFrequent,
42    #[error("文件上传请求格式不正确")]
43    MultipartRequired,
44    #[error("未定义的枚举值,{0}")]
45    UndefinedEnumValue(SharedString),
46    #[error("没有数据库连接")]
47    NoDbClient,
48    #[error("预编译sql失败,{0}")]
49    PrepareStatementError(anyhow::Error),
50    #[error("查询数据失败,{0}")]
51    QueryError(anyhow::Error),
52    #[error("数据操作失败,{0}")]
53    ExecuteError(anyhow::Error),
54    #[error("开启数据库事务失败,{0}")]
55    OpenTransactionError(anyhow::Error),
56    #[error("获取数据字段失败,{0}")]
57    ExtractDataError(anyhow::Error),
58    #[error("提交数据库事务失败,{0}")]
59    CommitTransactionError(anyhow::Error),
60    #[error("没有缓存连接")]
61    NoCacheClient,
62    #[error("缓存操作失败,{0}")]
63    CacheOperationError(anyhow::Error),
64}
65
66impl ErrNo {
67    pub fn code(&self) -> i32 {
68        return match *self {
69            ErrNo::LoginRequired => -1,
70            ErrNo::CommonError(_) => -2,
71            ErrNo::Other(_) => -3,
72            ErrNo::ConfigError(_) => -4,
73            ErrNo::Timeout(_) => -5,
74            ErrNo::NoService(_) => -6,
75            ErrNo::ServiceBusy(_) => -7,
76            ErrNo::ServicePaused => -8,
77            ErrNo::NoSuchApi => -9,
78            ErrNo::SerializeError(_) => -10,
79            ErrNo::DeserializeError(_) => -11,
80            ErrNo::ApiError(_) => -12,
81            ErrNo::Utf8Only => -13,
82            ErrNo::ParamFormatError => -14,
83            ErrNo::ParamInvalid(_) => -15,
84            ErrNo::TokenInvalid => -16,
85            ErrNo::NotAllowed => -17,
86            ErrNo::TooFrequent => -18,
87            ErrNo::MultipartRequired => -19,
88            ErrNo::UndefinedEnumValue(_) => -20,
89            ErrNo::NoDbClient => -21,
90            ErrNo::PrepareStatementError(_) => -22,
91            ErrNo::QueryError(_) => -23,
92            ErrNo::ExecuteError(_) => -24,
93            ErrNo::OpenTransactionError(_) => -25,
94            ErrNo::ExtractDataError(_) => -26,
95            ErrNo::CommitTransactionError(_) => -27,
96            ErrNo::NoCacheClient => -28,
97            ErrNo::CacheOperationError(_) => -29,
98        };
99    }
100    pub fn message(&self) -> SharedString {
101        return self.to_string().into();
102    }
103}
104
105impl<T> From<ErrNo> for Response<T> {
106    fn from(err_no: ErrNo) -> Response<T> {
107        return Response::failure(err_no.code(), err_no.message(), None);
108    }
109}
110
111pub fn open_transaction_error<E>(error: E) -> ErrNo
112where
113    E: std::error::Error + Send + Sync + 'static,
114{
115    ErrNo::OpenTransactionError(error.into())
116}
117
118pub fn prepare_statement_error<E>(error: E) -> ErrNo
119where
120    E: std::error::Error + Send + Sync + 'static,
121{
122    ErrNo::PrepareStatementError(error.into())
123}
124
125pub fn query_error<E>(error: E) -> ErrNo
126where
127    E: std::error::Error + Send + Sync + 'static,
128{
129    ErrNo::QueryError(error.into())
130}
131
132pub fn undefined_enum_value(err_msg: SharedString) -> ErrNo {
133    ErrNo::UndefinedEnumValue(err_msg)
134}
135
136pub fn extract_data_error<E>(error: E) -> ErrNo
137where
138    E: std::error::Error + Send + Sync + 'static,
139{
140    ErrNo::ExtractDataError(error.into())
141}
142
143pub fn execute_error<E>(error: E) -> ErrNo
144where
145    E: std::error::Error + Send + Sync + 'static,
146{
147    ErrNo::ExecuteError(error.into())
148}
149
150pub fn commit_transaction_error<E>(error: E) -> ErrNo
151where
152    E: std::error::Error + Send + Sync + 'static,
153{
154    ErrNo::CommitTransactionError(error.into())
155}