From 19d78ca2f8c5d37ba0c8bac76e30714a65c9f7b2 Mon Sep 17 00:00:00 2001 From: Matthew Hall Date: Thu, 28 Mar 2024 22:24:04 +1300 Subject: Basic implementation of CLI arguments --- src/args.rs | 51 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 src/args.rs (limited to 'src/args.rs') diff --git a/src/args.rs b/src/args.rs new file mode 100644 index 0000000..6753664 --- /dev/null +++ b/src/args.rs @@ -0,0 +1,51 @@ +use std::env; + +pub struct Args { + pub directory: String, + pub n_sentences: u32, + pub unique: bool, +} + +impl Args { + pub fn parse() -> Option { + let arg_vec: Vec = env::args().collect(); + let mut i = 1; //skip first arg (execution path) + + let mut n_sentences = 1; + let mut unique = false; + let mut opt_directory: Option = None; + + while i < arg_vec.len() { + match arg_vec[i].as_str() { + "-n" | "--sentences" => { + if i + 1 < arg_vec.len() { + n_sentences = arg_vec[i+1].parse::().ok()?; + } else { + return None; + } + i += 2; + }, + "--unique" => { + unique = true; + i += 1; + }, + other => { + opt_directory = match opt_directory { + Some(_) => { return None; }, + None => Some(other.to_string()), + }; + i += 1; + }, + } + } + + let directory = opt_directory?; + + Some(Args { + directory, + n_sentences, + unique, + }) + } +} + -- cgit v1.2.1