1
2pub fn parse(args: Vec<String>) -> Vec<(String, String)> {
3 let tr: String = String::from("true");
4 let vec_args: &mut Vec<(String, String)> = &mut Vec::new();
5 for mut el in args {
6 let mut is_arg = false;
7 if el.starts_with("-") {
8 if el.starts_with("--") {
9 el = el[2..].to_string();
10 } else {
11 el = el[1..].to_string();
12 }
13 is_arg = true;
14 }
15 let spliting: Vec<&str> = el.split("=").collect();
16 match spliting.len() {
17 1 => {
18 if is_arg {
19 vec_args.push((spliting[0].to_owned(), tr.clone()));
20 } else {
21 if vec_args.len() != 0 {
22 let ln = vec_args.len();
23 vec_args[ln - 1].1 += (add_to(spliting[0])).as_str();
24 }
25 }
26 },
27 2 | 3 | 4 | 5 | 6 | 7 => vec_args.push((spliting[0].to_owned(), spliting[1].to_owned())),
28 _ => continue
29 }
30 }
31 vec_args.to_vec()
32}
33
34fn add_to<'a>(input: &'a str) -> String {
35 "_".to_owned() + input
36}
37
38
39#[cfg(test)]
40mod tests {
41 use super::*;
42
43 #[test]
44 fn it_works() {
45 let result = parse(vec!["--a".to_string(), "--b".to_string(), "--s=45".to_string()]);
46 assert_eq!(result, vec![("a".to_string(), "true".to_string()), ("b".to_string(), "true".to_string()), ("s".to_string(), "45".to_string())]);
47 }
48
49 #[test]
50 fn it_works2() {
51 let result = parse(vec!["--a".to_string(), "--b".to_string(), "--s=45".to_string(), "-f=this is long phrase".to_string()]);
52 println!("----------------------");
53 println!("{:#?}", result);
54 println!("----------------------");
55 assert_eq!(result, vec![("a".to_string(), "true".to_string()), ("b".to_string(), "true".to_string()), ("s".to_string(), "45".to_string()), ("f".to_string(), "this is long phrase".to_string())]);
56 }
57
58 #[test]
59 fn it_works3() {
60 let result = parse(vec!["--a".to_string(),
61 "--b".to_string(), "--s=45".to_string(),
62 "-f=this".to_string(),
63 "is".to_string(),
64 "long".to_string(),
65 "phrase".to_string()]);
66 println!("----------------------");
67 println!("{:#?}", result);
68 println!("----------------------");
69 assert_eq!(result, vec![("a".to_string(), "true".to_string()), ("b".to_string(), "true".to_string()), ("s".to_string(), "45".to_string()), ("f".to_string(), "this_is_long_phrase".to_string())]);
70 }
71}