38 lines
1.0 KiB
Rust
38 lines
1.0 KiB
Rust
use convert_case::{Case, Casing};
|
|
use yaml_rust2::Yaml;
|
|
|
|
#[macro_export]
|
|
macro_rules! deserialize_error {
|
|
($kind:expr, $key:expr, $name:expr) => {
|
|
panic!("Expected {} '{}' in {}.", $kind, $key, $name);
|
|
};
|
|
}
|
|
|
|
pub fn make_build_fn_name(s: &str) -> String {
|
|
format!("build_{}", s.to_case(Case::Snake))
|
|
}
|
|
|
|
pub fn make_build_pair(s: &str) -> String {
|
|
format!("{}_pair", s.to_case(Case::Snake))
|
|
}
|
|
|
|
pub fn unwrap_single_member_hash(hash: &Yaml) -> (String, &Yaml) {
|
|
let as_hash = hash.as_hash().unwrap();
|
|
if as_hash.is_empty() {
|
|
panic!("empty hash");
|
|
} else if as_hash.len() > 1 {
|
|
panic!("hash contains more than one key");
|
|
}
|
|
let (member_key, member_value) = as_hash.iter().collect::<Vec<(&Yaml, &Yaml)>>()[0];
|
|
let key_as_string = member_key.as_str().unwrap().to_string();
|
|
(key_as_string, member_value)
|
|
}
|
|
|
|
pub fn get_as_bool(yaml: &Yaml) -> bool {
|
|
yaml.as_bool().unwrap_or(false)
|
|
}
|
|
|
|
pub fn get_as_bool_or(yaml: &Yaml, or: bool) -> bool {
|
|
yaml.as_bool().unwrap_or(or)
|
|
}
|