compress_json_rs/
helpers.rs1use serde_json::{Value, Map};
2
3pub fn trim_undefined(object: &mut Map<String, Value>) {
5 object.retain(|_, v| !v.is_null());
6}
7
8pub fn trim_undefined_recursively(object: &mut Map<String, Value>) {
10 let mut tracks = Vec::new();
11 fn recurse(obj: &mut Map<String, Value>, tracks: &mut Vec<*const Map<String, Value>>) {
12 tracks.push(obj as *const _);
13 let keys: Vec<String> = obj.keys().cloned().collect();
14 for key in keys {
15 if let Some(mut v) = obj.remove(&key) {
16 if v.is_null() {
17 } else {
19 match v {
20 Value::Object(mut m) => {
21 let ptr = &m as *const _;
22 if !tracks.contains(&ptr) {
23 recurse(&mut m, tracks);
24 }
25 obj.insert(key, Value::Object(m));
26 }
27 other => {
28 obj.insert(key, other);
29 }
30 }
31 }
32 }
33 }
34 }
35 recurse(object, &mut tracks);
36}