moneylib 0.14.0

Library to deal with money in Rust.
Documentation
use std::{error::Error, fmt::Display};

pub type ErrVal = Box<dyn Error + Send + Sync + 'static>;

const ERROR_PREFIX: &str = "[MONEYLIB]";

/// Error type for moneylib.
#[non_exhaustive]
#[derive(Debug)]
pub enum MoneyError {
    ParseStrError(ErrVal),
    OverflowError,

    /// CurrencyMismatchError(got, expected)
    CurrencyMismatchError(String, String),

    ParseLocaleError(ErrVal),

    ExchangeError(ErrVal),

    ObjMoneyError(ErrVal),
}

impl Display for MoneyError {
    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
        match self {
            MoneyError::ParseStrError(err) => write!(f, "{ERROR_PREFIX} parsing error: {}", err),

            MoneyError::OverflowError => write!(f, "{ERROR_PREFIX} got overflowed"),

            MoneyError::CurrencyMismatchError(got, expected) => {
                write!(
                    f,
                    "{ERROR_PREFIX} currency mismatch: got {got}, expected {expected}",
                )
            }

            MoneyError::ParseLocaleError(err) => {
                write!(f, "{ERROR_PREFIX} error parsing locale: {}", err)
            }

            MoneyError::ExchangeError(err) => write!(f, "{ERROR_PREFIX} exchange error: {}", err),

            MoneyError::ObjMoneyError(err) => write!(f, "{ERROR_PREFIX} obj_money error: {}", err),
        }
    }
}

impl Error for MoneyError {}