summaryrefslogtreecommitdiff
path: root/src/flags.rs
blob: 91acf3acd0a98bcedc29d801817597dca00492b3 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
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
}