diff --git a/src/entry/unix/unix.rs b/src/entry/unix/unix.rs index bf7b400..16e0762 100644 --- a/src/entry/unix/unix.rs +++ b/src/entry/unix/unix.rs @@ -16,7 +16,6 @@ use super::promptbuffer::PromptBuffer; use crate::parser; use crate::command; use crate::evaluate::evaluate; -use crate::evaluate::EvalError; use crate::context::Context; @@ -91,7 +90,7 @@ fn do_expression( match g_evaluated { Ok(_) => unreachable!(), - Err((l, EvalError::TooBig)) => { + Err((l, e)) => { write!( stdout, "{}{}{}{}{}{}\r\n", color::Fg(color::Red), @@ -103,90 +102,11 @@ fn do_expression( ).unwrap(); write!( - stdout, " {}{}Mathematical Error: {}Number too big{}\r\n\n", - style::Bold, - color::Fg(color::Red), - style::Reset, - color::Fg(color::Reset), - ).unwrap(); - }, - - Err((l, EvalError::ZeroDivision)) => { - write!( - stdout, "{}{}{}{}{}{}\r\n", - color::Fg(color::Red), - style::Bold, - " ".repeat(l.pos + 4), - "^".repeat(l.len), - color::Fg(color::Reset), - style::Reset, - ).unwrap(); - - write!( - stdout, " {}{}Mathematical Error: {}Division by zero{}\r\n\n", - style::Bold, - color::Fg(color::Red), - style::Reset, - color::Fg(color::Reset), - ).unwrap(); - }, - - Err((l, EvalError::BadMath)) => { - write!( - stdout, "{}{}{}{}{}{}\r\n", - color::Fg(color::Red), - style::Bold, - " ".repeat(l.pos + 4), - "^".repeat(l.len), - color::Fg(color::Reset), - style::Reset, - ).unwrap(); - - write!( - stdout, " {}{}Mathematical Error: {}Failed to evaluate expression{}\r\n\n", - style::Bold, - color::Fg(color::Red), - style::Reset, - color::Fg(color::Reset), - ).unwrap(); - }, - - Err((l, EvalError::IncompatibleUnit)) => { - write!( - stdout, "{}{}{}{}{}{}\r\n", - color::Fg(color::Red), - style::Bold, - " ".repeat(l.pos + 4), - "^".repeat(l.len), - color::Fg(color::Reset), - style::Reset, - ).unwrap(); - - write!( - stdout, " {}{}Evaluation Error: {}Incompatible units{}\r\n\n", - style::Bold, - color::Fg(color::Red), - style::Reset, - color::Fg(color::Reset), - ).unwrap(); - }, - - Err((l, EvalError::BadDefineName)) => { - write!( - stdout, "{}{}{}{}{}{}\r\n", - color::Fg(color::Red), - style::Bold, - " ".repeat(l.pos + 4), - "^".repeat(l.len), - color::Fg(color::Reset), - style::Reset, - ).unwrap(); - - write!( - stdout, " {}{}Evaluation Error: {}Invalid variable name{}\r\n\n", + stdout, " {}{}Evaluation Error: {}{}{}\r\n\n", style::Bold, color::Fg(color::Red), style::Reset, + e.to_string(), color::Fg(color::Reset), ).unwrap(); } diff --git a/src/evaluate/mod.rs b/src/evaluate/mod.rs index fe5c65b..59c305e 100644 --- a/src/evaluate/mod.rs +++ b/src/evaluate/mod.rs @@ -11,4 +11,27 @@ pub enum EvalError { ZeroDivision, IncompatibleUnit, BadDefineName -} \ No newline at end of file +} + + +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 units") + }, + EvalError::BadDefineName => { + String::from("Invalid variable name") + } + } + } +}