From 191632ce0ab810b4773f64eaf80ad67e87200c0b Mon Sep 17 00:00:00 2001 From: Tyler Murphy Date: Wed, 9 Nov 2022 10:49:25 -0500 Subject: help and version flags --- src/flags.rs | 58 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) create mode 100644 src/flags.rs (limited to 'src/flags.rs') diff --git a/src/flags.rs b/src/flags.rs new file mode 100644 index 0000000..91acf3a --- /dev/null +++ b/src/flags.rs @@ -0,0 +1,58 @@ +pub struct Flags { + pub help: bool, + pub version: bool, + pub dont_persist: bool, + pub arg_count: usize +} + +pub fn parse(args: &[String]) -> Flags { + let mut flags = Flags { + help: false, + version: false, + dont_persist: false, + arg_count: 0 + }; + for arg in args { + if !is_arg(&arg) { break; } + flags.arg_count += 1; + if arg.starts_with("--") { + let flag = &arg[2..]; + check_flag(&flag, &mut flags); + } else { + let flag = &arg[1..]; + for char in flag.chars() { + check_flag(&char.to_string(), &mut flags); + } + } + } + flags +} + +fn is_arg(arg: &str) -> bool { + return arg.starts_with("-"); +} + +const HELP_FLAG: &str = "help h"; +const VERSION_FLAG: &str = "version v"; +const DONT_PERSIST: &str = "d"; + +fn check_flag(arg: &str, flags: &mut Flags) { + if has_flag_set(&arg, HELP_FLAG) { + flags.help = true + } + if has_flag_set(&arg, VERSION_FLAG) { + flags.version = true + } + if has_flag_set(&arg, DONT_PERSIST) { + flags.dont_persist = true + } +} + +fn has_flag_set(arg: &str, check: &str) -> bool { + for check_arg in check.split(" ") { + if check_arg == arg { + return true + } + } + return false +} \ No newline at end of file -- cgit v1.2.3-freya