1 #[cfg(feature = "yaml")] 2 macro_rules! yaml_tuple2 { 3 ($a:ident, $v:ident, $c:ident) => {{ 4 if let Some(vec) = $v.as_vec() { 5 for ys in vec { 6 if let Some(tup) = ys.as_vec() { 7 debug_assert_eq!(2, tup.len()); 8 $a = $a.$c(yaml_str!(tup[0]), yaml_str!(tup[1])); 9 } else { 10 panic!("Failed to convert YAML value to vec"); 11 } 12 } 13 } else { 14 panic!("Failed to convert YAML value to vec"); 15 } 16 $a 17 }}; 18 } 19 20 #[cfg(feature = "yaml")] 21 macro_rules! yaml_tuple3 { 22 ($a:ident, $v:ident, $c:ident) => {{ 23 if let Some(vec) = $v.as_vec() { 24 for ys in vec { 25 if let Some(tup) = ys.as_vec() { 26 debug_assert_eq!(3, tup.len()); 27 $a = $a.$c(yaml_str!(tup[0]), yaml_opt_str!(tup[1]), yaml_str!(tup[2])); 28 } else { 29 panic!("Failed to convert YAML value to vec"); 30 } 31 } 32 } else { 33 panic!("Failed to convert YAML value to vec"); 34 } 35 $a 36 }}; 37 } 38 39 #[cfg(feature = "yaml")] 40 macro_rules! yaml_vec_or_str { 41 ($v:ident, $a:ident, $c:ident) => {{ 42 let maybe_vec = $v.as_vec(); 43 if let Some(vec) = maybe_vec { 44 for ys in vec { 45 if let Some(s) = ys.as_str() { 46 $a = $a.$c(s); 47 } else { 48 panic!("Failed to convert YAML value {:?} to a string", ys); 49 } 50 } 51 } else { 52 if let Some(s) = $v.as_str() { 53 $a = $a.$c(s); 54 } else { 55 panic!( 56 "Failed to convert YAML value {:?} to either a vec or string", 57 $v 58 ); 59 } 60 } 61 $a 62 }}; 63 } 64 65 #[cfg(feature = "yaml")] 66 macro_rules! yaml_opt_str { 67 ($v:expr) => {{ 68 if $v.is_null() { 69 Some( 70 $v.as_str() 71 .unwrap_or_else(|| panic!("failed to convert YAML {:?} value to a string", $v)), 72 ) 73 } else { 74 None 75 } 76 }}; 77 } 78 79 #[cfg(feature = "yaml")] 80 macro_rules! yaml_str { 81 ($v:expr) => {{ 82 $v.as_str() 83 .unwrap_or_else(|| panic!("failed to convert YAML {:?} value to a string", $v)) 84 }}; 85 } 86 87 #[cfg(feature = "yaml")] 88 macro_rules! yaml_to_str { 89 ($a:ident, $v:ident, $c:ident) => {{ 90 $a.$c(yaml_str!($v)) 91 }}; 92 } 93 94 #[cfg(feature = "yaml")] 95 macro_rules! yaml_to_bool { 96 ($a:ident, $v:ident, $c:ident) => {{ 97 $a.$c($v 98 .as_bool() 99 .unwrap_or_else(|| panic!("failed to convert YAML {:?} value to a string", $v))) 100 }}; 101 } 102 103 #[cfg(feature = "yaml")] 104 macro_rules! yaml_to_u64 { 105 ($a:ident, $v:ident, $c:ident) => {{ 106 $a.$c($v 107 .as_i64() 108 .unwrap_or_else(|| panic!("failed to convert YAML {:?} value to a string", $v)) 109 as u64) 110 }}; 111 } 112 113 #[cfg(feature = "yaml")] 114 macro_rules! yaml_to_usize { 115 ($a:ident, $v:ident, $c:ident) => {{ 116 $a.$c($v 117 .as_i64() 118 .unwrap_or_else(|| panic!("failed to convert YAML {:?} value to a string", $v)) 119 as usize) 120 }}; 121 } 122