diff options
Diffstat (limited to 'src/config.rs')
-rw-r--r-- | src/config.rs | 63 |
1 files changed, 0 insertions, 63 deletions
diff --git a/src/config.rs b/src/config.rs deleted file mode 100644 index f491852..0000000 --- a/src/config.rs +++ /dev/null | |||
@@ -1,63 +0,0 @@ | |||
1 | extern crate yaml_rust; | ||
2 | use self::yaml_rust::YamlLoader; | ||
3 | |||
4 | use std::collections::HashMap; | ||
5 | use std::fs::File; | ||
6 | use std::io::prelude::*; | ||
7 | |||
8 | pub struct SectionConfig { | ||
9 | pub pattern: String, | ||
10 | pub groups: Vec<String>, | ||
11 | } | ||
12 | |||
13 | pub struct Config { | ||
14 | pub sections: HashMap<String, SectionConfig>, | ||
15 | } | ||
16 | |||
17 | impl Config { | ||
18 | pub fn from_file(p: &str, expected: Vec<&'static str>) -> Self { | ||
19 | let mut f = File::open(p).unwrap(); | ||
20 | let mut buf = String::new(); | ||
21 | f.read_to_string(&mut buf).unwrap(); | ||
22 | let docs = YamlLoader::load_from_str(&buf).unwrap(); | ||
23 | |||
24 | let doc = &docs[0]; | ||
25 | |||
26 | let mut sections: HashMap<String, SectionConfig> = HashMap::new(); | ||
27 | for (name, entry) in doc["sections"].as_hash().unwrap() { | ||
28 | sections.insert(name.as_str().unwrap().into(), | ||
29 | SectionConfig { | ||
30 | pattern: entry["pattern"].as_str().unwrap().into(), | ||
31 | groups: entry["groups"] | ||
32 | .as_vec() | ||
33 | .unwrap() | ||
34 | .into_iter() | ||
35 | .map(|v| v.as_str().unwrap().into()) | ||
36 | .collect(), | ||
37 | }); | ||
38 | } | ||
39 | |||
40 | |||
41 | for ex in &expected { | ||
42 | if !sections.contains_key(&ex.to_string()) { | ||
43 | panic!("config: section '{}' not found", ex); | ||
44 | } | ||
45 | } | ||
46 | |||
47 | { | ||
48 | let traits = §ions["traits"]; | ||
49 | if !traits.groups.contains(&"indexed_raw".to_string()) { | ||
50 | panic!("config: no group 'indexed_raw' found in section 'traits'"); | ||
51 | } | ||
52 | if !traits.groups.contains(&"official_raw".to_string()) { | ||
53 | panic!("config: no group 'official_raw' found in section 'traits'"); | ||
54 | } | ||
55 | let tags = §ions["tags"]; | ||
56 | if !tags.groups.contains(&"tags_raw".to_string()) { | ||
57 | panic!("config: no group 'tags_raw' found in section 'tags'"); | ||
58 | } | ||
59 | } | ||
60 | |||
61 | Config { sections: sections } | ||
62 | } | ||
63 | } | ||