use std::fmt;
#[derive(Debug)]
pub enum TombaError {
Api {
message: String,
code: u16,
},
Http(reqwest::Error),
Parse(serde_json::Error),
InvalidParam(String),
}
impl std::error::Error for TombaError {
fn source(&self) -> Option<&(dyn std::error::Error + 'static)> {
match self {
TombaError::Http(e) => Some(e),
TombaError::Parse(e) => Some(e),
TombaError::Api { .. } => None,
TombaError::InvalidParam(_) => None,
}
}
}
impl fmt::Display for TombaError {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
TombaError::Api { message, code } => {
write!(f, "Tomba API error ({}): {}", code, message)
}
TombaError::Http(e) => {
write!(f, "HTTP request error: {}", e)
}
TombaError::Parse(e) => {
write!(f, "JSON parse error: {}", e)
}
TombaError::InvalidParam(msg) => {
write!(f, "Invalid parameter: {}", msg)
}
}
}
}
impl From<reqwest::Error> for TombaError {
fn from(err: reqwest::Error) -> Self {
TombaError::Http(err)
}
}
impl From<serde_json::Error> for TombaError {
fn from(err: serde_json::Error) -> Self {
TombaError::Parse(err)
}
}