use std::time::Duration;
use thiserror::Error;
#[non_exhaustive]
#[derive(Error, Debug)]
pub enum HivehookError {
#[error("API error: {message}")]
Api {
message: String,
status_code: Option<u16>,
},
#[error("not found: {message}")]
NotFound {
message: String,
extensions: Option<serde_json::Value>,
},
#[error("conflict: {message}")]
Conflict {
message: String,
extensions: Option<serde_json::Value>,
},
#[error("auth error: {0}")]
Auth(String),
#[error("validation error: {message}")]
Validation {
message: String,
extensions: Option<serde_json::Value>,
},
#[error("rate limited: {message}")]
RateLimit {
retry_after: Option<Duration>,
message: String,
},
#[error("server error {status}: {message}")]
ServerError {
status: u16,
message: String,
},
#[error("HTTP error: {0}")]
Http(#[from] reqwest::Error),
#[error("JSON error: {0}")]
Json(#[from] serde_json::Error),
}