| #[cfg(feature = "yaml")] |
| macro_rules! yaml_tuple2 { |
| ($a:ident, $v:ident, $c:ident) => {{ |
| if let Some(vec) = $v.as_vec() { |
| for ys in vec { |
| if let Some(tup) = ys.as_vec() { |
| debug_assert_eq!(2, tup.len()); |
| $a = $a.$c(yaml_str!(tup[0]), yaml_str!(tup[1])); |
| } else { |
| panic!("Failed to convert YAML value to vec"); |
| } |
| } |
| } else { |
| panic!("Failed to convert YAML value to vec"); |
| } |
| $a |
| }}; |
| } |
| |
| #[cfg(feature = "yaml")] |
| macro_rules! yaml_tuple3 { |
| ($a:ident, $v:ident, $c:ident) => {{ |
| if let Some(vec) = $v.as_vec() { |
| for ys in vec { |
| if let Some(tup) = ys.as_vec() { |
| debug_assert_eq!(3, tup.len()); |
| $a = $a.$c( |
| yaml_str!(tup[0]), |
| yaml_opt_str!(tup[1]), |
| yaml_opt_str!(tup[2]), |
| ); |
| } else { |
| panic!("Failed to convert YAML value to vec"); |
| } |
| } |
| } else { |
| panic!("Failed to convert YAML value to vec"); |
| } |
| $a |
| }}; |
| } |
| |
| #[cfg(feature = "yaml")] |
| macro_rules! yaml_vec_or_str { |
| ($a:ident, $v:ident, $c:ident) => {{ |
| let maybe_vec = $v.as_vec(); |
| if let Some(vec) = maybe_vec { |
| for ys in vec { |
| if let Some(s) = ys.as_str() { |
| $a = $a.$c(s); |
| } else { |
| panic!("Failed to convert YAML value {:?} to a string", ys); |
| } |
| } |
| } else { |
| if let Some(s) = $v.as_str() { |
| $a = $a.$c(s); |
| } else { |
| panic!( |
| "Failed to convert YAML value {:?} to either a vec or string", |
| $v |
| ); |
| } |
| } |
| $a |
| }}; |
| } |
| |
| #[cfg(feature = "yaml")] |
| macro_rules! yaml_vec { |
| ($a:ident, $v:ident, $c:ident) => {{ |
| let maybe_vec = $v.as_vec(); |
| if let Some(vec) = maybe_vec { |
| let content = vec.into_iter().map(|ys| { |
| if let Some(s) = ys.as_str() { |
| s |
| } else { |
| panic!("Failed to convert YAML value {:?} to a string", ys); |
| } |
| }); |
| $a = $a.$c(content) |
| } else { |
| panic!("Failed to convert YAML value {:?} to a vec", $v); |
| } |
| $a |
| }}; |
| } |
| |
| #[cfg(feature = "yaml")] |
| macro_rules! yaml_opt_str { |
| ($v:expr) => {{ |
| if !$v.is_null() { |
| Some( |
| $v.as_str() |
| .unwrap_or_else(|| panic!("failed to convert YAML {:?} value to a string", $v)), |
| ) |
| } else { |
| None |
| } |
| }}; |
| } |
| |
| #[cfg(feature = "yaml")] |
| macro_rules! yaml_char { |
| ($v:expr) => {{ |
| $v.as_str() |
| .unwrap_or_else(|| panic!("failed to convert YAML {:?} value to a string", $v)) |
| .chars() |
| .next() |
| .unwrap_or_else(|| panic!("Expected char")) |
| }}; |
| } |
| |
| #[cfg(feature = "yaml")] |
| macro_rules! yaml_str { |
| ($v:expr) => {{ |
| $v.as_str() |
| .unwrap_or_else(|| panic!("failed to convert YAML {:?} value to a string", $v)) |
| }}; |
| } |
| |
| #[cfg(feature = "yaml")] |
| macro_rules! yaml_to_char { |
| ($a:ident, $v:ident, $c:ident) => {{ |
| $a.$c(yaml_char!($v)) |
| }}; |
| } |
| |
| #[cfg(feature = "yaml")] |
| macro_rules! yaml_to_str { |
| ($a:ident, $v:ident, $c:ident) => {{ |
| $a.$c(yaml_str!($v)) |
| }}; |
| } |
| |
| #[cfg(feature = "yaml")] |
| macro_rules! yaml_to_bool { |
| ($a:ident, $v:ident, $c:ident) => {{ |
| $a.$c($v |
| .as_bool() |
| .unwrap_or_else(|| panic!("failed to convert YAML {:?} value to a string", $v))) |
| }}; |
| } |
| |
| #[cfg(feature = "yaml")] |
| macro_rules! yaml_to_usize { |
| ($a:ident, $v:ident, $c:ident) => {{ |
| $a.$c($v |
| .as_i64() |
| .unwrap_or_else(|| panic!("failed to convert YAML {:?} value to a string", $v)) |
| as usize) |
| }}; |
| } |
| |
| #[cfg(feature = "yaml")] |
| macro_rules! yaml_to_setting { |
| ($a:ident, $v:ident, $c:ident, $s:ident, $t:literal, $n:expr) => {{ |
| if let Some(v) = $v.as_vec() { |
| for ys in v { |
| if let Some(s) = ys.as_str() { |
| $a = $a.$c(s.parse::<$s>().unwrap_or_else(|_| { |
| panic!("Unknown {} '{}' found in YAML file for {}", $t, s, $n) |
| })); |
| } else { |
| panic!( |
| "Failed to convert YAML {:?} value to an array of strings", |
| $v |
| ); |
| } |
| } |
| } else if let Some(v) = $v.as_str() { |
| $a = $a.$c(v |
| .parse::<$s>() |
| .unwrap_or_else(|_| panic!("Unknown {} '{}' found in YAML file for {}", $t, v, $n))) |
| } else { |
| panic!("Failed to convert YAML {:?} value to a string", $v); |
| } |
| $a |
| }}; |
| } |