mirror of https://github.com/rm-dr/daisy
52 lines
1.0 KiB
Rust
52 lines
1.0 KiB
Rust
mod operator;
|
|
mod function;
|
|
mod evaluate;
|
|
|
|
pub use self::evaluate::evaluate;
|
|
|
|
#[derive(Debug)]
|
|
pub enum EvalError {
|
|
BadMath,
|
|
TooBig,
|
|
ZeroDivision,
|
|
IncompatibleUnit,
|
|
IncompatibleUnits(String, String),
|
|
Undefined(String),
|
|
EvaluationError,
|
|
BadArguments(String, usize, usize)
|
|
}
|
|
|
|
|
|
impl ToString for EvalError {
|
|
fn to_string(&self) -> String {
|
|
match self {
|
|
EvalError::BadMath => {
|
|
String::from("Failed to evaluate expression")
|
|
},
|
|
EvalError::TooBig => {
|
|
String::from("Number too big")
|
|
},
|
|
EvalError::ZeroDivision => {
|
|
String::from("Division by zero")
|
|
},
|
|
EvalError::IncompatibleUnit => {
|
|
String::from("Incompatible unit")
|
|
},
|
|
EvalError::IncompatibleUnits(a, b) => {
|
|
format!("Incompatible units ({a} and {b})")
|
|
},
|
|
EvalError::Undefined(s) => {
|
|
format!("{s} is undefined")
|
|
},
|
|
EvalError::EvaluationError => {
|
|
String::from("Could not evaluate")
|
|
},
|
|
EvalError::BadArguments(s, want, got) => {
|
|
format!("{s} takes {want} argument{}, got {got}",
|
|
if *want == 1 {""} else {"s"},
|
|
)
|
|
}
|
|
}
|
|
}
|
|
}
|