1#![doc = include_str!("../README.md")]
2
3pub fn jsonerr2array(avalue: &serde_json::Value, reverse: bool, first: bool) -> serde_json::Value {
4 let mut result = serde_json::json!([]);
5 traverse_json(avalue, &mut result);
6
7 if reverse {
8 if let Some(array) = result.as_array_mut() {
9 array.reverse();
10 }
11 }
12
13 if first {
14 let tmp_result = result.get(0);
15 if tmp_result.is_some() {
16 result = tmp_result.unwrap().clone();
17 }
18 }
19
20 result
21}
22
23pub fn traverse_json(avalue: &serde_json::Value, result: &mut serde_json::Value) {
24 if avalue.is_object() {
25 let mut tmpvalue = avalue.clone();
26 let mut origin: Option<serde_json::Value> = None;
27
28 if tmpvalue.as_object().unwrap().contains_key("err") {
29 let err: &serde_json::Value = tmpvalue.as_object_mut().unwrap().get("err").unwrap();
30 if err.as_object().unwrap().contains_key("origin") {
31 let key_value = tmpvalue["err"]
32 .as_object_mut()
33 .unwrap()
34 .remove_entry("origin")
35 .unwrap();
36 origin = Some(key_value.1);
37 }
38 }
39
40 if let Some(result) = result.as_array_mut() {
41 result.push(tmpvalue);
42 }
43
44 if origin.is_some() {
45 traverse_json(&origin.unwrap(), result);
46 }
47 }
48}