clp_lib/
parse.rs

1
2
3use std::collections::HashMap;
4use colored::*;
5
6///
7///     #Example
8///     
9/// 
10///     let Unconditionals = vec!["--Utestflag1","--Utestflag2"];
11///     let Conditionals = vec!["-utestflag3"];
12///     let args = parse(Conditionals, Unconditionals).expect("Arguments not properly formatted"); //Will return an error if unconditional arguments not given or input arguments not properly formatted.
13///     let conds = args.0; // hashmap of conditionals as keys and data as values
14///     let unconds = args.1; // same for unconditionals
15/// 
16
17
18pub fn parse<'a>(conditionals:Vec::<&str>,unconditionals:Vec::<&str>) -> Result<(HashMap<String,String>,HashMap<String,String>),String>{
19    use std::env;
20    let mut conditionals_map: HashMap<String,String> = HashMap::with_capacity(conditionals.len());
21    let mut unconditionals_map: HashMap<String,String> = HashMap::with_capacity(unconditionals.len());
22
23    for i in conditionals {
24        conditionals_map.insert(i.to_string(),"".to_string());
25    }
26    for i in &unconditionals {
27        unconditionals_map.insert(i.to_string(),"".to_string());
28    }
29
30    let args = env::args().collect::<Vec<String>>();
31
32    for (n,i) in args.iter().enumerate() {
33        if conditionals_map.contains_key(i) {
34            if args.len() < n + 1 {
35                println!("args not properly formated");
36                return Err(String::from("Results not properly formatted"));
37            }
38            conditionals_map.insert(i.to_string(),args[n+1].clone());
39
40        }
41    }
42
43    for (n,i) in args.iter().enumerate() {
44        if unconditionals_map.contains_key(i) {
45            if args.len() < n + 1 {
46                println!("args not properly formated");
47                return Err(String::from("Results not properly formatted"));
48            }
49           unconditionals_map.insert(i.to_string(),args[n+1].clone());
50
51        }
52
53    }
54    
55    for i in &unconditionals {
56        if unconditionals_map.get_key_value(*i).unwrap().1 == ""{
57            let error = format!("Mandatory flag {} not included",i.blue());
58            print!("\n \n");
59            print!("{}","mandatory flags ".red());
60            for i in unconditionals {
61                print!("{} ",i.green());
62            }
63            print!("{}"," were not included \n \n".red());
64            return Err(error);
65        }
66    }
67
68    
69
70    let to_return = Ok((conditionals_map,unconditionals_map));
71    return to_return;
72}
73