1#[derive(Debug, thiserror::Error)]
3pub enum MoneyError {
4 #[error("Currency mismatch: cannot operate on {left} and {right}")]
6 CurrencyMismatch {
7 left: String,
9 right: String,
11 },
12
13 #[error("Overflow during operation")]
15 Overflow,
16
17 #[error("Invalid amount: {0}")]
19 InvalidAmount(String),
20
21 #[error("Rounding error: {0}")]
23 Rounding(String),
24
25 #[error("Serialization error: {0}")]
27 Serialization(String),
28}
29
30pub type Result<T> = std::result::Result<T, MoneyError>;
32
33impl From<rust_decimal::Error> for MoneyError {
34 fn from(e: rust_decimal::Error) -> Self {
35 MoneyError::InvalidAmount(e.to_string())
36 }
37}