chord_core/
value.rs

1pub use serde::Deserialize;
2pub use serde::Serialize;
3pub use serde_json::error::Error;
4pub use serde_json::from_reader;
5pub use serde_json::from_slice;
6pub use serde_json::from_str;
7pub use serde_json::from_value;
8pub use serde_json::json;
9pub use serde_json::ser::to_string;
10pub use serde_json::ser::to_string_pretty;
11pub use serde_json::to_value;
12
13pub type Value = serde_json::Value;
14pub type Map = serde_json::Map<String, Value>;
15pub type Number = serde_json::Number;
16
17pub fn map_merge_deep(old: &Map, new: &Map) -> Map {
18    let mut crt = old.clone();
19    for (k, v) in new {
20        let ov = crt.get(k);
21        if let Some(ov) = ov {
22            if let Value::Object(ov) = ov {
23                if let Value::Object(nv) = v {
24                    let mv = map_merge_deep(ov, nv);
25                    crt.insert(k.clone(), Value::Object(mv));
26                    continue;
27                }
28            }
29        }
30        crt.insert(k.clone(), v.clone());
31    }
32    crt
33}