use serde::Deserialize;
use std::fmt::Formatter;
#[derive(Debug, Deserialize)]
pub struct ApiError {
pub reason: Option<String>,
pub message: Option<String>,
#[serde(rename = "type")]
pub kind: Option<String>,
}
#[derive(Debug)]
pub enum BrawlError {
Api(ApiError),
Network(reqwest::Error),
Serialization(reqwest::Error),
}
impl std::fmt::Display for BrawlError {
fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
match self {
BrawlError::Api(e) => {
let reason = e.reason.as_deref().unwrap_or("unknown reason");
let message = e.message.as_deref().unwrap_or("no message provided");
let type_ = e.kind.as_deref().unwrap_or("unknown type");
write!(f, "API Error: {} ({}) [{}]", reason, message, type_)
}
BrawlError::Network(e) => write!(f, "Network Error: {e}"),
BrawlError::Serialization(e) => write!(f, "Serialization Error: {}", e),
}
}
}
impl std::error::Error for BrawlError {}