aboutsummaryrefslogtreecommitdiffstats
path: root/src/main.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/main.rs')
-rw-r--r--src/main.rs29
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
}