#![doc = include_str!("../README.md")]
pub fn jsonerr2array(avalue: &serde_json::Value, reverse: bool, first: bool) -> serde_json::Value {
let mut result = serde_json::json!([]);
traverse_json(avalue, &mut result);
if reverse {
if let Some(array) = result.as_array_mut() {
array.reverse();
}
}
if first {
let tmp_result = result.get(0);
if tmp_result.is_some() {
result = tmp_result.unwrap().clone();
}
}
result
}
pub fn traverse_json(avalue: &serde_json::Value, result: &mut serde_json::Value) {
if avalue.is_object() {
let mut tmpvalue = avalue.clone();
let mut origin: Option<serde_json::Value> = None;
if tmpvalue.as_object().unwrap().contains_key("err") {
let err: &serde_json::Value = tmpvalue.as_object_mut().unwrap().get("err").unwrap();
if err.as_object().unwrap().contains_key("origin") {
let key_value = tmpvalue["err"]
.as_object_mut()
.unwrap()
.remove_entry("origin")
.unwrap();
origin = Some(key_value.1);
}
}
if let Some(result) = result.as_array_mut() {
result.push(tmpvalue);
}
if origin.is_some() {
traverse_json(&origin.unwrap(), result);
}
}
}