use core::fmt;
#[derive(Debug, Clone, PartialEq)]
pub enum SpectrumError {
LengthMismatch { xs: usize, ys: usize },
TooFewSamples(usize),
NotMonotonic { index: usize },
OutOfRange { x: f64, lo: f64, hi: f64 },
Parse(String),
}
impl fmt::Display for SpectrumError {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
SpectrumError::LengthMismatch { xs, ys } => {
write!(f, "spectrum length mismatch: xs.len()={xs}, ys.len()={ys}")
}
SpectrumError::TooFewSamples(n) => {
write!(f, "spectrum needs at least 2 samples (got {n})")
}
SpectrumError::NotMonotonic { index } => {
write!(f, "spectrum xs not strictly increasing at index {index}")
}
SpectrumError::OutOfRange { x, lo, hi } => {
write!(f, "spectrum query x={x} outside domain [{lo}, {hi}]")
}
SpectrumError::Parse(msg) => write!(f, "spectrum parse error: {msg}"),
}
}
}
impl std::error::Error for SpectrumError {}