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