Compare commits

..

2 commits

Author SHA1 Message Date
f1970a657a added rustyline 2024-07-09 14:20:04 -04:00
ce65fefcba fixed incorrect ranges 2024-07-09 14:18:23 -04:00
3 changed files with 14 additions and 19 deletions

View file

@ -1,6 +1,6 @@
[package]
name = "quickmath"
version = "0.2.3"
version = "0.3.0"
edition = "2021"
authors = [ "Valerie Wolfe <sleeplessval@gmail.com>" ]
description = "A quick command-line math evaluator."
@ -14,6 +14,7 @@ path = "src/main.rs"
[dependencies]
evalexpr = "11.0.0"
rustyline = "14.0.0"
termion = "1.5.6"
[profile.release]

View file

@ -15,7 +15,7 @@ pub fn fix(arg: &Value) -> EvalResult {
let count = args.len();
if count != 2 {
return Err(EvalexprError::WrongFunctionArgumentAmount { expected: 2, actual: count });
return Err(EvalexprError::WrongFunctionArgumentAmount { expected: 2..=2, actual: count });
}
let float = args[0].as_float()?;
@ -63,7 +63,7 @@ pub fn logarithm(arg: &Value) -> EvalResult {
output = value.log(base).into();
},
_ => {
return Err(EvalexprError::WrongFunctionArgumentAmount { expected: 2, actual: count });
return Err(EvalexprError::WrongFunctionArgumentAmount { expected: 2..=2, actual: count });
}
}
return Ok(output);

View file

@ -1,7 +1,6 @@
use std::{
env,
io::{
stdin,
stdout,
Write
@ -16,6 +15,7 @@ use evalexpr::{
HashMapContext,
Value
};
use rustyline::DefaultEditor;
use termion::{
color,
style
@ -62,33 +62,27 @@ fn main() {
for expression in expressions {
match expression.as_str() {
"help" => help_text(),
_ => do_eval(expression, &mut context)
_ => do_eval(&expression, &mut context)
}
}
} else {
let mut rl = DefaultEditor::new().unwrap();
// enter interactive mode if no args are given
println!("{}quickmaths v{}{}\n{}Interactive Mode{}", style::Bold, VERSION, style::Reset, style::Faint, style::Reset);
loop {
print!("> ");
stdout().flush().unwrap();
let mut i_line = String::new();
let line_result = stdin().read_line(&mut i_line);
if line_result.is_err() {
break;
}
let line = i_line.trim().to_string();
match line.as_str() {
"" |
"exit" => break,
_ => do_eval(line, &mut context)
match rl.readline("> ").as_deref() {
Ok("") |
Ok("exit") |
Err(_) => break,
Ok(line) => do_eval(line, &mut context),
}
reset();
}
}
}
fn do_eval(i_expression: String, context: &mut HashMapContext) {
let expression = i_expression.as_str();
fn do_eval(expression: &str, context: &mut HashMapContext) {
let i_result = eval_with_context_mut(expression, context);
if i_result.is_err() {
println!(