1
2
3use std::collections::HashMap;
4use colored::*;
5
6pub 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