Add help menu
This commit is contained in:
parent
cedc70af3a
commit
87c10619b5
@ -1,5 +1,6 @@
|
|||||||
## Next
|
## Next
|
||||||
- Add support for non-US "metre" and "litre" spellings
|
- Add support for non-US "metre" and "litre" spellings
|
||||||
|
- Add help menu
|
||||||
- Add `--version` flag
|
- Add `--version` flag
|
||||||
- Freak out instead of ignoring unexpected arguments
|
- Freak out instead of ignoring unexpected arguments
|
||||||
- Fix decimeter parsed as centimeter
|
- Fix decimeter parsed as centimeter
|
||||||
|
|||||||
54
src/main.rs
54
src/main.rs
@ -1,23 +1,48 @@
|
|||||||
use cpc::eval;
|
use cpc::eval;
|
||||||
use cpc::units::Unit;
|
use cpc::units::Unit;
|
||||||
use std::process::exit;
|
use std::process::exit;
|
||||||
|
use std::env;
|
||||||
|
|
||||||
const VERSION: &'static str = env!("CARGO_PKG_VERSION");
|
const VERSION: &'static str = env!("CARGO_PKG_VERSION");
|
||||||
|
|
||||||
|
fn print_help() {
|
||||||
|
println!(concat!(
|
||||||
|
"Usage: cpc '<expression>' [options]",
|
||||||
|
"\n",
|
||||||
|
"\nOptions:",
|
||||||
|
"\n --verbose Enable verbose logging",
|
||||||
|
"\n --version Show cpc version",
|
||||||
|
"\n --help Show this help page",
|
||||||
|
));
|
||||||
|
}
|
||||||
|
|
||||||
|
fn get_args() -> env::Args {
|
||||||
|
let mut args = env::args().into_iter();
|
||||||
|
args.next(); // skip binary name
|
||||||
|
return args;
|
||||||
|
}
|
||||||
|
|
||||||
/// CLI interface
|
/// CLI interface
|
||||||
fn main() {
|
fn main() {
|
||||||
use std::env;
|
// parse these first so they work if there are unexpected args
|
||||||
let mut args = env::args().into_iter();
|
for arg in get_args() {
|
||||||
args.next();
|
|
||||||
let mut verbose = false;
|
|
||||||
let mut expression_opt = None;
|
|
||||||
for arg in args {
|
|
||||||
match arg.as_str() {
|
match arg.as_str() {
|
||||||
"-v" | "--verbose" => verbose = true,
|
|
||||||
"--version" => {
|
"--version" => {
|
||||||
println!("{}", VERSION);
|
println!("{}", VERSION);
|
||||||
exit(0);
|
exit(0);
|
||||||
},
|
},
|
||||||
|
"--help" => {
|
||||||
|
print_help();
|
||||||
|
exit(0);
|
||||||
|
},
|
||||||
|
_ => {},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
let mut verbose = false;
|
||||||
|
let mut expression_opt = None;
|
||||||
|
for arg in get_args() {
|
||||||
|
match arg.as_str() {
|
||||||
|
"-v" | "--verbose" => verbose = true,
|
||||||
_ => {
|
_ => {
|
||||||
if expression_opt == None {
|
if expression_opt == None {
|
||||||
expression_opt = Some(arg);
|
expression_opt = Some(arg);
|
||||||
@ -28,8 +53,13 @@ fn main() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
match expression_opt {
|
let expression = match expression_opt {
|
||||||
Some(expression) => {
|
Some(expression) => expression,
|
||||||
|
None => {
|
||||||
|
print_help();
|
||||||
|
exit(0);
|
||||||
|
},
|
||||||
|
};
|
||||||
match eval(&expression, true, Unit::Celsius, verbose) {
|
match eval(&expression, true, Unit::Celsius, verbose) {
|
||||||
Ok(answer) => {
|
Ok(answer) => {
|
||||||
if !verbose {
|
if !verbose {
|
||||||
@ -42,9 +72,3 @@ fn main() {
|
|||||||
},
|
},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
None => {
|
|
||||||
eprintln!("No argument supplied");
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user