use thiserror::Error;
#[derive(Error, Debug)]
pub enum CurrencyError {
#[error("Network error: {0}")]
Network(#[from] reqwest::Error),
#[error("JSON parsing error: {0}")]
Json(#[from] serde_json::Error),
#[error("API error: {message}")]
Api { message: String },
#[error("Invalid currency code: {code}")]
InvalidCurrency { code: String },
#[error("Invalid amount: {amount}")]
InvalidAmount { amount: f64 },
#[error("Configuration error: {message}")]
Configuration { message: String },
#[error("Conversion error: {message}")]
Conversion { message: String },
}
impl CurrencyError {
pub fn api<S: Into<String>>(message: S) -> Self {
CurrencyError::Api {
message: message.into(),
}
}
pub fn configuration<S: Into<String>>(message: S) -> Self {
CurrencyError::Configuration {
message: message.into(),
}
}
pub fn conversion<S: Into<String>>(message: S) -> Self {
CurrencyError::Conversion {
message: message.into(),
}
}
pub fn invalid_currency<S: Into<String>>(code: S) -> Self {
CurrencyError::InvalidCurrency { code: code.into() }
}
pub fn invalid_amount(amount: f64) -> Self {
CurrencyError::InvalidAmount { amount }
}
}
pub type Result<T> = std::result::Result<T, CurrencyError>;