From ef4738061ecdc5e58f2425841c290c59bc36b1a8 Mon Sep 17 00:00:00 2001 From: Kasper Date: Sat, 3 Jul 2021 01:55:10 +0200 Subject: [PATCH] Freak out instead of ignoring unexpected arguments --- CHANGELOG.md | 5 +++++ src/main.rs | 51 ++++++++++++++++++++++++++++++++++----------------- 2 files changed, 39 insertions(+), 17 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d85e784..8f92bb8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,8 @@ +## Next +- Freak out instead of ignoring unexpected arguments +- Add support for non-US "metre" and "litre" spellings +- Fix decimeter parsed as centimeter + ## 1.5.1 - 2021 Jun 10 - Fix numbers unnecessarily displayed in E notation diff --git a/src/main.rs b/src/main.rs index 8bedf52..3af4fce 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,27 +1,44 @@ use cpc::eval; use cpc::units::Unit; +use std::process::exit; -/// cpc CLI interface +/// CLI interface fn main() { use std::env; - let mut args: Vec = env::args().collect(); + let mut args = env::args().into_iter(); + args.next(); let mut verbose = false; - if let Some(pos) = args.iter().position(|x| x == "-v" || x == "--verbose") { - verbose = true; - args.remove(pos); - } - if args.len() >= 2 { - match eval(&args[1], true, Unit::Celsius, verbose) { - Ok(answer) => { - if !verbose { - println!("{}", answer); + let mut expression_opt = None; + for arg in args { + match arg.as_str() { + "-v" | "--verbose" => verbose = true, + _ => { + if expression_opt == None { + expression_opt = Some(arg); + } else { + eprintln!("Unexpected argument: {}", arg); + exit(1); } - }, - Err(e) => { - println!("{}", e) - }, + } + } + } + match expression_opt { + Some(expression) => { + match eval(&expression, true, Unit::Celsius, verbose) { + Ok(answer) => { + if !verbose { + println!("{}", answer); + } + }, + Err(e) => { + eprintln!("{}", e); + exit(1); + }, + } + } + None => { + eprintln!("No argument supplied"); + exit(1); } - } else { - eprintln!("No argument supplied"); } }