pub use crate::NotSorted;
pub use crate::builder::TooFewElements;
use core::{convert::From, fmt};
#[cfg(feature = "std")]
use std::error::Error;
#[derive(Debug, Copy, Clone)]
#[cfg_attr(feature = "serde", derive(serde::Deserialize, serde::Serialize))]
pub enum LinearError {
TooFewElements(TooFewElements),
KnotElementInequality(KnotElementInequality),
NotSorted(NotSorted),
}
impl fmt::Display for LinearError {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
LinearError::TooFewElements(inner) => inner.fmt(f),
LinearError::NotSorted(inner) => inner.fmt(f),
LinearError::KnotElementInequality(inner) => inner.fmt(f),
}
}
}
impl From<TooFewElements> for LinearError {
fn from(from: TooFewElements) -> Self {
LinearError::TooFewElements(from)
}
}
impl From<KnotElementInequality> for LinearError {
fn from(from: KnotElementInequality) -> Self {
LinearError::KnotElementInequality(from)
}
}
impl From<NotSorted> for LinearError {
fn from(from: NotSorted) -> Self {
LinearError::NotSorted(from)
}
}
#[cfg(feature = "std")]
impl Error for LinearError {}
#[derive(Debug, Copy, Clone)]
#[cfg_attr(feature = "serde", derive(serde::Deserialize, serde::Serialize))]
pub struct KnotElementInequality {
elements: usize,
knots: usize,
}
impl fmt::Display for KnotElementInequality {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
write!(
f,
"There has to be as many knots as elements, however we found {} elements and {} knots.",
self.elements, self.knots
)
}
}
#[cfg(feature = "std")]
impl Error for KnotElementInequality {}
impl KnotElementInequality {
pub fn new(elements: usize, knots: usize) -> Self {
KnotElementInequality { elements, knots }
}
}