diff --git a/src/lexer.rs b/src/lexer.rs index 821fad8..1288d4b 100644 --- a/src/lexer.rs +++ b/src/lexer.rs @@ -7,9 +7,10 @@ use crate::TextOperator::{Of, To}; use crate::Constant::{E, Pi}; use crate::LexerKeyword::{In, PercentChar, Per, Mercury, Hg, PoundForce, PoundWord, Force, DoubleQuotes}; use crate::FunctionIdentifier::{Cbrt, Ceil, Cos, Exp, Abs, Floor, Ln, Log, Round, Sin, Sqrt, Tan}; +use crate::units::Unit; use crate::units::Unit::*; -pub fn lex(input: &str, allow_trailing_operators: bool) -> Result { +pub fn lex(input: &str, allow_trailing_operators: bool, default_degree: Unit) -> Result { let mut input = input.replace(",", ""); // ignore commas @@ -25,7 +26,7 @@ pub fn lex(input: &str, allow_trailing_operators: bool) -> Result Result tokens.push(Token::Unit(Kelvin)), "c" | "celcius" => tokens.push(Token::Unit(Celcius)), "f" | "fahrenheit" | "fahrenheits" => tokens.push(Token::Unit(Fahrenheit)), + "deg" | "degree" | "degrees" => tokens.push(Token::Unit(default_degree)), _ => { return Err(format!("Invalid string: {}", string)); diff --git a/src/main.rs b/src/main.rs index be85b8b..afd54d1 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,3 +1,4 @@ +use crate::units::Unit; use std::time::{Instant}; use decimal::d128; @@ -91,17 +92,17 @@ fn main() { use std::env; let args: Vec = env::args().collect(); if args.len() >= 2 { - eval(&args[1], true); + eval(&args[1], true, Unit::Celcius); } else { println!("No argument supplied"); } } -pub fn eval(input: &str, allow_trailing_operators: bool) { +pub fn eval(input: &str, allow_trailing_operators: bool, default_degree: Unit) { let lex_start = Instant::now(); - - match lexer::lex(input, allow_trailing_operators) { + + match lexer::lex(input, allow_trailing_operators, default_degree) { Ok(tokens) => { let lex_time = Instant::now().duration_since(lex_start).as_nanos() as f32;