mirror of https://github.com/rm-dr/daisy
96 lines
2.2 KiB
Rust
96 lines
2.2 KiB
Rust
|
use crate::formattedtext::FormattedText;
|
||
|
|
||
|
#[derive(Debug)]
|
||
|
pub enum DaisyError {
|
||
|
|
||
|
// Parser errors
|
||
|
//MissingCloseParen,
|
||
|
ExtraCloseParen,
|
||
|
EmptyGroup,
|
||
|
Syntax,
|
||
|
BadNumber,
|
||
|
|
||
|
// Evaluation errors
|
||
|
BadMath,
|
||
|
TooBig,
|
||
|
ZeroDivision,
|
||
|
IncompatibleUnit,
|
||
|
IncompatibleUnits(String, String),
|
||
|
Undefined(String),
|
||
|
EvaluationError,
|
||
|
BadArguments(String, usize, usize)
|
||
|
}
|
||
|
|
||
|
impl DaisyError {
|
||
|
pub fn text(&self) -> FormattedText {
|
||
|
match self {
|
||
|
//DaisyError::MissingCloseParen => {
|
||
|
// String::from("Missing close parenthesis")
|
||
|
//},
|
||
|
DaisyError::ExtraCloseParen => {
|
||
|
return FormattedText::new(
|
||
|
"[e]Syntax Error:[n] Extra close parenthesis".to_string()
|
||
|
);
|
||
|
},
|
||
|
DaisyError::EmptyGroup => {
|
||
|
return FormattedText::new(
|
||
|
"[e]Syntax Error:[n] Groups can't be empty".to_string()
|
||
|
);
|
||
|
},
|
||
|
DaisyError::Syntax => {
|
||
|
return FormattedText::new(
|
||
|
"[e]Syntax Error[n]".to_string()
|
||
|
);
|
||
|
},
|
||
|
DaisyError::BadNumber => {
|
||
|
return FormattedText::new(
|
||
|
"[e]Syntax Error:[n] Invalid number".to_string()
|
||
|
);
|
||
|
}
|
||
|
|
||
|
DaisyError::BadMath => {
|
||
|
return FormattedText::new(
|
||
|
"[e]Evaluation Error:[n] Failed to evaluate expression".to_string()
|
||
|
);
|
||
|
},
|
||
|
DaisyError::TooBig => {
|
||
|
return FormattedText::new(
|
||
|
"[e]Evaluation Error:[n] Number too big".to_string()
|
||
|
);
|
||
|
|
||
|
},
|
||
|
DaisyError::ZeroDivision => {
|
||
|
return FormattedText::new(
|
||
|
"[e]Evaluation Error:[n] Division by zero".to_string()
|
||
|
);
|
||
|
},
|
||
|
DaisyError::IncompatibleUnit => {
|
||
|
return FormattedText::new(
|
||
|
"[e]Evaluation Error:[n] Incompatible unit".to_string()
|
||
|
);
|
||
|
},
|
||
|
DaisyError::IncompatibleUnits(a, b) => {
|
||
|
return FormattedText::new(format!(
|
||
|
"[e]Evaluation Error:[n] Incompatible units ([c]{a}[n] and [c]{b}[n])"
|
||
|
));
|
||
|
},
|
||
|
DaisyError::Undefined(s) => {
|
||
|
return FormattedText::new(format!(
|
||
|
"[e]Evaluation Error:[n] [c]{s}[n] is not defined"
|
||
|
));
|
||
|
},
|
||
|
DaisyError::EvaluationError => {
|
||
|
return FormattedText::new(
|
||
|
"[e]Evaluation Error:[n] Could not evaluate".to_string()
|
||
|
);
|
||
|
},
|
||
|
DaisyError::BadArguments(s, want, got) => {
|
||
|
return FormattedText::new(format!(
|
||
|
"[e]Evaluation Error:[n] [c]{s}[n] takes {want} argument{}, got {got}",
|
||
|
if *want == 1 {""} else {"s"},
|
||
|
));
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|