diff options
Diffstat (limited to 'src/main.rs')
| -rw-r--r-- | src/main.rs | 29 |
1 files changed, 25 insertions, 4 deletions
diff --git a/src/main.rs b/src/main.rs index ab5f4a0..d5cb465 100644 --- a/src/main.rs +++ b/src/main.rs @@ -2,9 +2,15 @@ use std::path::{Path, PathBuf}; use tihdy::run_file; +struct Args { + file: Option<PathBuf>, + print: bool, +} + fn main() { - let file = file_from_args().unwrap_or_else(|| Path::new("tests/simple.tdy").to_owned()); - if let Err(errs) = run_file(&file) { + let args = parse_args(); + let file = args.file.unwrap_or_else(|| Path::new("tests/simple.tdy").to_owned()); + if let Err(errs) = run_file(&file, args.print) { for err in errs.iter() { println!("{}", err); } @@ -12,6 +18,21 @@ fn main() { } } -fn file_from_args() -> Option<PathBuf> { - std::env::args().skip(1).map(|s| Path::new(&s).to_owned()).find(|p| p.is_file()) +fn parse_args() -> Args { + let mut args = Args { + file: None, + print: false, + }; + + for s in std::env::args().skip(1) { + let path = Path::new(&s).to_owned(); + if path.is_file() { + args.file = Some(path); + } else if "-p" == s { + args.print = true; + } else { + eprintln!("Invalid argument {}.", s); + } + }; + args } |
