use core::fmt;
use std::error::Error;
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum RationalError {
ZeroDenominator,
DivisionByZero,
NormalizationOverflow,
ArithmeticOverflow {
operation: &'static str,
},
}
impl fmt::Display for RationalError {
fn fmt(&self, formatter: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
Self::ZeroDenominator => write!(formatter, "denominator must not be zero"),
Self::DivisionByZero => write!(formatter, "division by zero-valued rational"),
Self::NormalizationOverflow => {
write!(
formatter,
"rational normalization overflowed the current representation"
)
},
Self::ArithmeticOverflow { operation } => {
write!(
formatter,
"rational {operation} overflowed the current representation"
)
},
}
}
}
impl Error for RationalError {}