#[cfg(feature = "serde")]
use serde::{Deserialize, Serialize};
use std::fmt::{Debug, Display};
use crate::{
error::Error,
traits::{Real, State},
};
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
#[derive(Debug, PartialEq, Clone)]
pub enum Status<T, Y>
where
T: Real,
Y: State<T>,
{
Uninitialized,
Initialized,
Error(Error<T, Y>),
Solving,
RejectedStep,
Interrupted,
Complete,
}
impl<T, Y> Display for Status<T, Y>
where
T: Real + Display,
Y: State<T> + Display,
{
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
match self {
Self::Uninitialized => write!(f, "NumericalMethod: Uninitialized"),
Self::Initialized => write!(f, "NumericalMethod: Initialized"),
Self::Error(err) => write!(f, "NumericalMethod Error: {}", err),
Self::Solving => write!(f, "NumericalMethod: Solving in progress"),
Self::RejectedStep => write!(f, "NumericalMethod: Step rejected"),
Self::Interrupted => write!(f, "NumericalMethod: Interrupted"),
Self::Complete => write!(f, "NumericalMethod: Complete"),
}
}
}