1use thiserror::Error;
4
5#[derive(Error, Debug)]
7pub enum CosError {
8 #[error("HTTP request failed: {0}")]
10 Http(#[from] reqwest::Error),
11
12 #[error("JSON serialization/deserialization failed: {0}")]
14 Json(#[from] serde_json::Error),
15
16 #[error("URL parsing failed: {0}")]
18 Url(#[from] url::ParseError),
19
20 #[error("Authentication failed: {message}")]
22 Auth { message: String },
23
24 #[error("Server error: {code} - {message}")]
26 Server { code: String, message: String },
27
28 #[error("Client error: {code} - {message}")]
30 Client { code: String, message: String },
31
32 #[error("Configuration error: {message}")]
34 Config { message: String },
35
36 #[error("IO error: {0}")]
38 Io(#[from] std::io::Error),
39
40 #[error("Other error: {message}")]
42 Other { message: String },
43}
44
45impl CosError {
46 pub fn auth<S: Into<String>>(message: S) -> Self {
48 Self::Auth {
49 message: message.into(),
50 }
51 }
52
53 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 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 pub fn config<S: Into<String>>(message: S) -> Self {
71 Self::Config {
72 message: message.into(),
73 }
74 }
75
76 pub fn other<S: Into<String>>(message: S) -> Self {
78 Self::Other {
79 message: message.into(),
80 }
81 }
82}
83
84pub type Result<T> = std::result::Result<T, CosError>;