1use std::collections::HashMap;
2
3
4pub struct SimpleArgs {
5 args: Vec<String>,
6}
7
8
9impl SimpleArgs {
10 pub fn new(args: Vec<String>) -> SimpleArgs {
11 return SimpleArgs { args: args };
12 }
13
14 pub fn parse(&self) -> (Vec<String>, Vec<String>, HashMap<String, String>) {
15 let mut normal = vec![];
16 let mut flags = vec![];
17 let mut vals = HashMap::new();
18
19 let mut skip_next = false;
20
21 for i in 0..self.args.len() {
22 let arg = &self.args[i];
23
24 if skip_next {
25 skip_next = false;
26 continue;
27 }
28
29 if arg.starts_with("--") {
30 if arg.contains("=") {
31 let split = arg.split_once('=').unwrap();
32
33 vals.insert(split.0[2..].to_string(), split.1.to_string());
34 } else {
35 skip_next = true;
36 if self.args.len() > i + 1 {
37 vals.insert(arg[2..].to_string(), self.args[i + 1].to_string());
38 }
39 }
40 continue;
41 }
42
43 if arg.starts_with('/') || arg.starts_with('-') {
44 let flag = arg[1..].to_string();
45
46 if !flags.contains(&flag) {
47 flags.push(flag);
48 }
49 continue;
50 }
51
52 normal.push(arg.to_string());
53 }
54
55 return (normal, flags, vals);
56 }
57}