#[derive(thiserror::Error, miette::Diagnostic, Debug)]
#[diagnostic(code(ralertsinua_http::client))]
pub enum ApiError {
#[error(transparent)]
Unknown(#[from] reqwest::Error),
#[error("API Error: Invalid token")]
InvalidToken,
#[error("API Error: Unauthorized: {0}")]
#[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'"))]
UnauthorizedError(reqwest::Error),
#[error("API Error: Rate limit exceeded")]
RateLimitError,
#[error("API Error: Internal server error")]
InternalServerError,
#[error("API Error: Forbidden")]
ForbiddenError,
#[error("API Error: Invalid parameter")]
InvalidParameterException,
#[error("API Error: Invalid URL: {0}")]
InvalidURL(reqwest::Error),
#[error("API Error: Generic Http error: {0}")]
HttpError(#[from] http::Error),
#[error("API Error: JSON parse error: {0}")]
ParseJson(#[from] serde_json::Error),
#[error("API Error: Internal error")]
Internal,
}