use std::fmt;
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum FinMoneyError {
CurrencyMismatch {
expected: String,
actual: String,
},
DivisionByZero,
InvalidPrecision(u32),
InvalidTick,
InvalidCurrencyCode(String),
InvalidCurrencyName(String),
ArithmeticOverflow,
InvalidAmount(String),
}
impl fmt::Display for FinMoneyError {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
FinMoneyError::CurrencyMismatch { expected, actual } => write!(
f,
"Currency mismatch: expected {}, got {}",
expected, actual
),
FinMoneyError::DivisionByZero => write!(f, "Division by zero"),
FinMoneyError::InvalidPrecision(p) => {
write!(f, "Invalid precision: {} (must be <= 28)", p)
}
FinMoneyError::InvalidTick => write!(f, "Invalid tick size (must be positive)"),
FinMoneyError::InvalidCurrencyCode(code) => {
write!(f, "Invalid currency code: {}", code)
}
FinMoneyError::InvalidCurrencyName(name) => {
write!(f, "Invalid currency name: {}", name)
}
FinMoneyError::ArithmeticOverflow => write!(f, "Arithmetic overflow occurred"),
FinMoneyError::InvalidAmount(msg) => write!(f, "Invalid amount: {}", msg),
}
}
}
impl std::error::Error for FinMoneyError {}
pub type Result<T> = std::result::Result<T, FinMoneyError>;