ralertsinua_http/
error.rs

1/// Custom enum that contains all the possible errors that may occur when using
2/// [`reqwest`].
3///
4/// Sample usage:
5///
6/// ```
7/// # #[tokio::main]
8/// # async fn main() {
9/// use http::{HttpError, AlertsInUaClient, BaseHttpClient};
10///
11/// let client = AlertsInUaClient::default();
12/// let response = client.get("wrongurl", None, &Default::default()).await;
13/// match response {
14///     Ok(data) => println!("request succeeded: {:?}", data),
15///     Err(HttpError::Client(e)) => eprintln!("request failed: {}", e),
16///     Err(HttpError::StatusCode(response)) => {
17///         let code = response.status().as_u16();
18///         match response.json::<rspotify_model::ApiError>().await {
19///             Ok(api_error) => eprintln!("status code {}: {:?}", code, api_error),
20///             Err(_) => eprintln!("status code {}", code),
21///         }
22///     },
23/// }
24/// # }
25/// ```
26#[derive(thiserror::Error, miette::Diagnostic, Debug)]
27#[diagnostic(code(ralertsinua_http::client))]
28pub enum ApiError {
29    /// The request couldn't be completed because there was an error when trying
30    /// to do so
31    #[error(transparent)]
32    // #[diagnostic(code(my_lib::bad_code))]
33    Unknown(#[from] reqwest::Error),
34
35    #[error("API Error: Invalid token")]
36    InvalidToken,
37
38    #[error("API Error: Unauthorized: {0}")]
39    #[diagnostic(help("most likely token is invalid or missing\n check you've provided it via environment variable 'ALERTSINUA_TOKEN' or as a parameter '--token'"))]
40    UnauthorizedError(reqwest::Error),
41
42    #[error("API Error: Rate limit exceeded")]
43    RateLimitError,
44
45    #[error("API Error: Internal server error")]
46    InternalServerError,
47
48    #[error("API Error: Forbidden")]
49    ForbiddenError,
50
51    #[error("API Error: Invalid parameter")]
52    InvalidParameterException,
53
54    #[error("API Error: Invalid URL: {0}")]
55    InvalidURL(reqwest::Error),
56
57    #[error("API Error: Generic Http error: {0}")]
58    HttpError(#[from] http::Error),
59
60    #[error("API Error: JSON parse error: {0}")]
61    ParseJson(#[from] serde_json::Error),
62
63    #[error("API Error: Internal error")]
64    Internal,
65}