rust_cutil/cutil/
extract.rs1use std::collections::HashMap;
2
3pub trait Extract {
4 fn extract_i64(&self, key: &str) -> Option<i64>;
5 fn extract_u64(&self, key: &str) -> Option<u64>;
6 fn extract_i32(&self, key: &str) -> Option<i32>;
7 fn extract_u32(&self, key: &str) -> Option<u32>;
8 fn extract_f32(&self, key: &str) -> Option<f32>;
9 fn extract_f64(&self, key: &str) -> Option<f64>;
10 fn extract_bool(&self, key: &str) -> Option<bool>;
11 fn extract_string(&self, key: &str) -> Option<String>;
12
13 fn extract_i64_default(&self, key: &str, default: i64) -> i64;
14 fn extract_u64_default(&self, key: &str, default: u64) -> u64;
15 fn extract_i32_default(&self, key: &str, default: i32) -> i32;
16 fn extract_u32_default(&self, key: &str, default: u32) -> u32;
17 fn extract_f32_default(&self, key: &str, default: f32) -> f32;
18 fn extract_f64_default(&self, key: &str, default: f64) -> f64;
19 fn extract_bool_default(&self, key: &str, default: bool) -> bool;
20 fn extract_string_default(&self, key: &str, default: &str) -> String;
21
22 fn extract_vec(&self, key: &str) -> Vec<String>;
23}
24
25impl Extract for HashMap<String, String> {
26 fn extract_i64(&self, key: &str) -> Option<i64> {
27 self.get(key).map(|s| s.parse::<i64>().unwrap_or_default())
28 }
29
30 fn extract_u64(&self, key: &str) -> Option<u64> {
31 self.get(key).map(|s| s.parse::<u64>().unwrap_or_default())
32 }
33
34 fn extract_i32(&self, key: &str) -> Option<i32> {
35 self.get(key).map(|s| s.parse::<i32>().unwrap_or_default())
36 }
37
38 fn extract_u32(&self, key: &str) -> Option<u32> {
39 self.get(key).map(|s| s.parse::<u32>().unwrap_or_default())
40 }
41
42 fn extract_f32(&self, key: &str) -> Option<f32> {
43 self.get(key).map(|s| s.parse::<f32>().unwrap_or_default())
44 }
45
46 fn extract_f64(&self, key: &str) -> Option<f64> {
47 self.get(key).map(|s| s.parse::<f64>().unwrap_or_default())
48 }
49
50 fn extract_bool(&self, key: &str) -> Option<bool> {
51 self.get(key).map(|s| s.parse::<bool>().unwrap_or_default())
52 }
53
54 fn extract_string(&self, key: &str) -> Option<String> {
55 self.get(key).map(|s| s.to_string())
56 }
57
58 fn extract_i64_default(&self, key: &str, default: i64) -> i64 {
59 self.get(key).unwrap_or(&default.to_string()).parse().unwrap_or_default()
60 }
61
62 fn extract_u64_default(&self, key: &str, default: u64) -> u64 {
63 self.get(key).unwrap_or(&default.to_string()).parse().unwrap_or_default()
64 }
65
66 fn extract_i32_default(&self, key: &str, default: i32) -> i32 {
67 self.get(key).unwrap_or(&default.to_string()).parse().unwrap_or_default()
68 }
69
70 fn extract_u32_default(&self, key: &str, default: u32) -> u32 {
71 self.get(key).unwrap_or(&default.to_string()).parse().unwrap_or_default()
72 }
73
74 fn extract_f32_default(&self, key: &str, default: f32) -> f32 {
75 self.get(key).unwrap_or(&default.to_string()).parse().unwrap_or_default()
76 }
77
78 fn extract_f64_default(&self, key: &str, default: f64) -> f64 {
79 self.get(key).unwrap_or(&default.to_string()).parse().unwrap_or_default()
80 }
81
82 fn extract_bool_default(&self, key: &str, default: bool) -> bool {
83 self.get(key).unwrap_or(&default.to_string()).parse().unwrap_or_default()
84 }
85
86 fn extract_string_default(&self, key: &str, default: &str) -> String {
87 self.get(key).unwrap_or(&default.to_string()).to_string()
88 }
89
90 fn extract_vec(&self, key: &str) -> Vec<String> {
91 self
92 .get(key)
93 .map(|s| s.split(',').map(|s| s.to_string()).collect())
94 .unwrap_or(vec![])
95 }
96}