1use thiserror::Error;
2
3#[derive(Debug, Error)]
5pub enum ApiError {
6 #[error("Bad request: {message} (status: {status})")]
9 BadRequest {
10 message: String,
12 status: reqwest::StatusCode,
14 },
15
16 #[error("Unauthorized: {message}")]
18 Unauthorized {
19 message: String,
21 },
22
23 #[error("Forbidden: {message}")]
25 Forbidden {
26 message: String,
28 },
29
30 #[error("Not found: {message}")]
32 NotFound {
33 message: String,
35 },
36
37 #[error("Validation error: {message}")]
39 ValidationError {
40 message: String,
42 },
43
44 #[error("Rate limited: {message}")]
46 RateLimited {
47 message: String,
49 },
50
51 #[error("Internal server error: {message}")]
53 InternalServerError {
54 message: String,
56 },
57
58 #[error("API error {status}: {message}")]
60 ApiError {
61 status: reqwest::StatusCode,
63 message: String,
65 },
66
67 #[error("Invalid parameter: {0}")]
70 InvalidParameter(String),
71
72 #[error("Network error: {0}")]
74 Network(#[from] reqwest::Error),
75
76 #[error("Invalid header value: {0}")]
78 InvalidHeaderValue(#[from] reqwest::header::InvalidHeaderValue),
79
80 #[error("URL parse error: {0}")]
82 UrlParse(#[from] url::ParseError),
83
84 #[error("JSON deserialization error: {error}. Source: {source_string}")]
86 JsonDeserialization {
87 error: serde_json::Error,
89 source_string: String,
91 },
92
93 #[error("JSON serialization error: {0}")]
95 JsonSerialization(#[from] serde_json::Error),
96}
97
98pub type ApiResult<T> = std::result::Result<T, ApiError>;