1use crate::auth::AuthError;
2use crate::request::ApiError;
3use http::method::InvalidMethod;
4use reqwest::header::InvalidHeaderValue;
5use thiserror::Error;
6
7#[derive(Debug, Error)]
8pub enum Error {
9 #[error("Request error: {0}")]
10 Request(reqwest::Error),
11 #[error("JSON error: {0}")]
12 Json(serde_json::Error),
13 #[error("Authentication error: {0}")]
14 Auth(AuthError),
15 #[error("API error: {0}")]
16 Api(ApiError),
17 #[error("Input error: {0}")]
18 Input(String),
19 #[error("Data not found in API response: {0}")]
20 DataNotFound(String),
21 #[error("Server error: {0}")]
22 Server(String),
23}
24
25impl From<reqwest::Error> for Error {
26 fn from(err: reqwest::Error) -> Self {
27 Error::Request(err)
28 }
29}
30
31impl From<serde_json::Error> for Error {
32 fn from(err: serde_json::Error) -> Self {
33 Error::Json(err)
34 }
35}
36
37impl From<AuthError> for Error {
38 fn from(err: AuthError) -> Self {
39 Error::Auth(err)
40 }
41}
42
43impl From<ApiError> for Error {
44 fn from(err: ApiError) -> Self {
45 Error::Api(err)
46 }
47}
48
49impl From<InvalidHeaderValue> for Error {
50 fn from(err: InvalidHeaderValue) -> Self {
51 Error::Server(err.to_string())
52 }
53}
54
55impl From<InvalidMethod> for Error {
56 fn from(err: InvalidMethod) -> Self {
57 Error::Server(err.to_string())
58 }
59}