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}