#[derive(Debug, thiserror::Error)]
pub enum AkahuError {
#[error("Bad request: {message}")]
BadRequest {
message: String,
status: u16,
},
#[error("Unauthorized: {message}")]
Unauthorized {
message: String,
},
#[error("Forbidden: {message}")]
Forbidden {
message: String,
},
#[error("Not found: {message}")]
NotFound {
message: String,
},
#[error("Rate limited: {message}")]
RateLimited {
message: String,
},
#[error("Internal server error: {message}")]
InternalServerError {
message: String,
},
#[error("API error {status}: {message}")]
ApiError {
status: u16,
message: String,
},
#[error("Network error: {0}")]
Network(#[from] reqwest::Error),
#[error("Invalid header value: {0}")]
InvalidHeaderValue(#[from] reqwest::header::InvalidHeaderValue),
#[error("URL parse error: {0}")]
UrlParse(#[from] url::ParseError),
#[error("JSON deserialization error: {error}{}", .source_string.as_ref().map(|s| format!(" - {}", s)).unwrap_or_default())]
JsonDeserialization {
error: serde_json::Error,
source_string: Option<String>,
},
#[error("Missing app secret - call with_app_secret() first")]
MissingAppSecret,
#[error("OAuth error: {error}{}", .error_description.as_ref().map(|d| format!(" - {}", d)).unwrap_or_default())]
OAuth {
error: String,
error_description: Option<String>,
},
}
pub type AkahuResult<T> = std::result::Result<T, AkahuError>;