cos_rust_sdk/
error.rs

1//! 错误处理模块
2
3use thiserror::Error;
4
5/// COS SDK 错误类型
6#[derive(Error, Debug)]
7pub enum CosError {
8    /// HTTP 请求错误
9    #[error("HTTP request failed: {0}")]
10    Http(#[from] reqwest::Error),
11
12    /// JSON 序列化/反序列化错误
13    #[error("JSON serialization/deserialization failed: {0}")]
14    Json(#[from] serde_json::Error),
15
16    /// URL 解析错误
17    #[error("URL parsing failed: {0}")]
18    Url(#[from] url::ParseError),
19
20    /// 认证错误
21    #[error("Authentication failed: {message}")]
22    Auth { message: String },
23
24    /// 服务器错误
25    #[error("Server error: {code} - {message}")]
26    Server { code: String, message: String },
27
28    /// 客户端错误
29    #[error("Client error: {code} - {message}")]
30    Client { code: String, message: String },
31
32    /// 配置错误
33    #[error("Configuration error: {message}")]
34    Config { message: String },
35
36    /// IO 错误
37    #[error("IO error: {0}")]
38    Io(#[from] std::io::Error),
39
40    /// 其他错误
41    #[error("Other error: {message}")]
42    Other { message: String },
43}
44
45impl CosError {
46    /// 创建认证错误
47    pub fn auth<S: Into<String>>(message: S) -> Self {
48        Self::Auth {
49            message: message.into(),
50        }
51    }
52
53    /// 创建服务器错误
54    pub fn server<S: Into<String>>(code: S, message: S) -> Self {
55        Self::Server {
56            code: code.into(),
57            message: message.into(),
58        }
59    }
60
61    /// 创建客户端错误
62    pub fn client<S: Into<String>>(code: S, message: S) -> Self {
63        Self::Client {
64            code: code.into(),
65            message: message.into(),
66        }
67    }
68
69    /// 创建配置错误
70    pub fn config<S: Into<String>>(message: S) -> Self {
71        Self::Config {
72            message: message.into(),
73        }
74    }
75
76    /// 创建其他错误
77    pub fn other<S: Into<String>>(message: S) -> Self {
78        Self::Other {
79            message: message.into(),
80        }
81    }
82}
83
84/// COS SDK 结果类型
85pub type Result<T> = std::result::Result<T, CosError>;