dingtalk_rs/
error.rs

1use reqwest::StatusCode;
2use thiserror::Error;
3
4pub type Result<T> = core::result::Result<T, Error>;
5
6#[derive(Error, Debug)]
7pub enum Error {
8    /// http error
9    #[error("request url:{url} error, statusCode:{status_code}, message:{message}")]
10    HttpError {
11        url: String,
12        status_code: StatusCode,
13        message: String,
14    },
15    /// API error
16    #[error("errcode: {code}, errmsg: {message}, request_id: {request_id}")]
17    ApiError {
18        code: u64,
19        message: String,
20        request_id: String,
21    },
22    #[error("{0}")]
23    General(String),
24    /// 更新时空子段
25    #[error("empty fileds when update")]
26    EmptyFiledsUpdate,
27    #[error(transparent)]
28    Reqwest(#[from] reqwest::Error),
29    #[error(transparent)]
30    InvalidHeaderValue(#[from] reqwest::header::InvalidHeaderValue),
31    #[error(transparent)]
32    InvalidHeaderName(#[from] reqwest::header::InvalidHeaderName),
33    #[error(transparent)]
34    Serde(#[from] serde_json::Error),
35    #[error(transparent)]
36    EnvVar(#[from] std::env::VarError),
37    #[error(transparent)]
38    Decode(#[from] base64::DecodeError),
39}
40
41pub fn new_http_error(url: String, status_code: StatusCode, message: String) -> Error {
42    Error::HttpError {
43        url,
44        status_code,
45        message,
46    }
47}
48
49pub fn new_api_error(code: u64, message: String, request_id: String) -> Error {
50    Error::ApiError {
51        code,
52        message,
53        request_id,
54    }
55}