use std::fmt;
#[derive(Debug, Clone, PartialEq)]
pub enum InterpolationError {
EmptyTable,
TooFewSamples {
required: usize,
actual: usize,
},
NonFiniteAbscissa,
NonFiniteValue,
DuplicateAbscissa,
UnsortedAbscissa,
OutOfRange {
requested_raw: f64,
min_raw: f64,
max_raw: f64,
},
}
impl fmt::Display for InterpolationError {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
Self::EmptyTable => write!(f, "interpolation table is empty"),
Self::TooFewSamples { required, actual } => write!(
f,
"interpolation table has too few samples: required {required}, got {actual}"
),
Self::NonFiniteAbscissa => write!(f, "interpolation abscissa is not finite"),
Self::NonFiniteValue => write!(f, "interpolation value is not finite"),
Self::DuplicateAbscissa => {
write!(f, "interpolation samples contain duplicate abscissae")
}
Self::UnsortedAbscissa => write!(f, "interpolation samples are not sorted"),
Self::OutOfRange {
requested_raw,
min_raw,
max_raw,
} => {
write!(
f,
"interpolation query {requested_raw} is outside diagnostic range [{min_raw}, {max_raw}]"
)
}
}
}
}
impl std::error::Error for InterpolationError {}