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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_fix() {
assert_eq!(fix("f"), "-f");
assert_eq!(fix("fixed"), "--fixed");
}
#[test]
fn test_parser() {
let parser: Parser = Parser::from(&vec![String::from("--test"), String::from("value"), String::from("-t")]);
assert_eq!(parser.contains("test"), true);
assert_eq!(parser.contains("t"), true);
assert_eq!(parser.contains("abc"), false);
assert_eq!(parser.contains("a"), false);
assert_eq!(parser.value_of("test"), "value");
}
#[test]
fn test_clean() {
let vec: Vec<String> = vec![String::from("./a.out"), String::from(".")];
assert_eq!(clean(vec), vec![String::from(".")]);
}
}
use std::env;
struct Parser {
pub args: Vec<String>
}
impl Parser {
pub fn from(new_args: &Vec<String>) -> Parser {
Parser {
args: new_args.clone()
}
}
pub fn contains(&self, ufixed: &str) -> bool {
self.args.contains(&fix(ufixed))
}
pub fn value_of(&self, ufixed: &str) -> String {
let mut res: String = String::new();
let mut i: usize = 0;
for x in self.args.iter() {
if String::from(x) == fix(ufixed) {
res = self.args[i + 1].clone();
}
i = i + 1;
}
res
}
}
pub fn fix(ufixed: &str) -> String {
let res = if ufixed.len() == 1 { "-" } else { "--" };
String::from(res) + ufixed
}
pub fn clean(collected: Vec<String>) -> Vec<String> {
let mut clone = collected.clone();
clone.remove(0);
clone
}
pub fn collect() -> Vec<String> {
clean(env::args().collect()).clone()
}