1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
use std::collections::BTreeMap;
use std::env;
pub type Arguments = BTreeMap<String, ArgumentTypes>;
#[derive(Debug, Clone)]
pub enum ArgumentTypes {
WithoutArguments,
WithArguments(Vec<String>),
}
pub fn parse_arguments(args: Vec<String>) -> Arguments {
let mut arguments: Arguments = BTreeMap::new();
let alength = args.len();
for argument in args.iter().enumerate() {
let (index, value) = argument;
if value.starts_with("--") {
let argument_head = value.clone().replace("--", "");
let args = args[index..alength]
.iter()
.filter(|arg| arg.starts_with('-') != true)
.map(|val| val.clone())
.collect::<Vec<String>>();
arguments.insert(argument_head.clone(), ArgumentTypes::WithArguments(args));
} else if value.starts_with("-") {
let argument = value.clone().replace("-", "");
arguments.insert(argument.clone(), ArgumentTypes::WithoutArguments);
}
}
arguments
}
pub fn get_runtime_arguments() -> Vec<String> {
let mut args = env::args().collect::<Vec<String>>();
args.remove(0);
return args;
}