1use yaml_rust2::Yaml;
2
3pub fn deep_equal(a: &Yaml, b: &Yaml) -> bool {
5 match (a, b) {
6 (Yaml::Real(a_str), Yaml::Real(b_str)) => a_str == b_str,
7 (Yaml::Integer(a_int), Yaml::Integer(b_int)) => a_int == b_int,
8 (Yaml::String(a_str), Yaml::String(b_str)) => a_str == b_str,
9 (Yaml::Boolean(a_bool), Yaml::Boolean(b_bool)) => a_bool == b_bool,
10 (Yaml::Array(a_vec), Yaml::Array(b_vec)) => {
11 if a_vec.len() != b_vec.len() {
12 false
13 } else {
14 a_vec.iter().zip(b_vec.iter()).all(|(a_item, b_item)| deep_equal(a_item, b_item))
15 }
16 }
17 (Yaml::Hash(a_hash), Yaml::Hash(b_hash)) => {
18 if a_hash.len() != b_hash.len() {
19 false
20 } else {
21 a_hash.iter().all(|(a_key, a_value)| {
22 b_hash.get(a_key).map_or(false, |b_value| deep_equal(a_value, b_value))
23 })
24 }
25 }
26 (Yaml::Null, Yaml::Null) => true,
27 _ => false,
28 }
29}