arg_pars/
lib.rs

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}