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::>()[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) }