Last active
August 15, 2020 17:51
-
-
Save maxnachlinger/cc8cbc2b35a83c70ddd064f193a1eca0 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
use serde_json::Value; | |
fn redact_props_strings(keys_to_redact: &Vec<String>, value: &mut Value, clear: bool) { | |
match value { | |
Value::Object(map) => { | |
for (k, v) in map { | |
redact_props_strings(&keys_to_redact, v, keys_to_redact.contains(&k)); | |
} | |
} | |
Value::Array(array) => { | |
for (_, v) in array.iter_mut().enumerate() { | |
redact_props_strings(&keys_to_redact, v, false); | |
} | |
} | |
Value::String(s) => { | |
if clear { | |
s.clear(); | |
} | |
} | |
_ => (), | |
} | |
} | |
fn main() { | |
let keys_to_redact: Vec<String> = vec!["prop2".to_string(), "prop4".to_string()]; | |
let test0 = r#"{ | |
"prop0": { | |
"prop1": { | |
"prop2": "redact me", | |
"prop3": "leave me" | |
} | |
}, | |
"prop4": "redact me" | |
}"#; | |
let mut value0: Value = serde_json::from_str(&test0).expect("error"); | |
redact_props_strings(&keys_to_redact, &mut value0, false); | |
println!("{}", serde_json::to_string_pretty(&value0).unwrap()); | |
let test1 = r#"{ | |
"prop0": { | |
"prop1": [{ | |
"prop2": "redact me", | |
"prop3": "leave me" | |
}, { | |
"prop2": "redact me", | |
"prop5": "leave me" | |
}] | |
}, | |
"prop4": "redact me" | |
}"#; | |
let mut value1: Value = serde_json::from_str(&test1).expect("error"); | |
redact_props_strings(&keys_to_redact, &mut value1, false); | |
println!("{}", serde_json::to_string_pretty(&value1).unwrap()); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment