rust_cutil/cutil/
extract.rs

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