use std::fmt::Display;
#[derive(Debug, Eq, PartialEq, Clone)]
pub enum SolveStatus {
NotSolved,
Optimal,
Infeasible,
Unbounded,
Other(String),
}
impl Display for SolveStatus {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
match self {
SolveStatus::NotSolved => write!(f, "Not Solved"),
SolveStatus::Optimal => write!(f, "Optimal"),
SolveStatus::Infeasible => write!(f, "Infeasible"),
SolveStatus::Unbounded => write!(f, "Unbounded"),
SolveStatus::Other(s) => write!(f, "Other: {}", s),
}
}
}
#[derive(Debug, Eq, PartialEq)]
pub enum SolveError {
NoObjective,
InvalidModel(String),
NumericalFailure(String),
InternalSolverError(String),
Unsupported(String),
Other(String),
}
impl Display for SolveError {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
match self {
SolveError::NoObjective => write!(f, "No objective function defined"),
SolveError::InvalidModel(msg) => write!(f, "Invalid model: {}", msg),
SolveError::NumericalFailure(msg) => write!(f, "Numerical failure: {}", msg),
SolveError::InternalSolverError(msg) => {
write!(f, "Internal solver error: {}", msg)
}
SolveError::Unsupported(msg) => write!(f, "Unsupported feature: {}", msg),
SolveError::Other(msg) => write!(f, "{}", msg),
}
}
}