summaryrefslogtreecommitdiff
path: root/src/flags.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/flags.rs')
-rw-r--r--src/flags.rs58
1 files changed, 58 insertions, 0 deletions
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