runtime_argument_parser/parser/
mod.rs

1use 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}