use compare_variables::Comparison;
use stem_material::uom::si::f64::Length;
#[derive(Debug)]
pub enum Error {
InvalidLength(Comparison<Length>),
InvalidF64(Comparison<f64>),
InvalidUsize(Comparison<usize>),
InequalMaterials,
EmptyStrandList,
Other(Box<dyn std::error::Error>),
}
impl std::fmt::Display for Error {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
match self {
Error::InvalidLength(comparison_error) => comparison_error.fmt(f),
Error::InvalidF64(comparison_error) => comparison_error.fmt(f),
Error::InvalidUsize(comparison_error) => comparison_error.fmt(f),
Error::InequalMaterials => write!(f, "all strand materials must be equal"),
Error::EmptyStrandList => write!(f, "strand list must not be empty"),
Error::Other(err) => err.fmt(f),
}
}
}
impl std::error::Error for Error {}
impl From<Comparison<Length>> for Error {
fn from(value: Comparison<Length>) -> Self {
return Error::InvalidLength(value);
}
}
impl From<Comparison<f64>> for Error {
fn from(value: Comparison<f64>) -> Self {
return Error::InvalidF64(value);
}
}
impl From<Comparison<usize>> for Error {
fn from(value: Comparison<usize>) -> Self {
return Error::InvalidUsize(value);
}
}