json_template/json/
mod.rs1use serde_json::Value;
4
5pub trait JSON {
7 fn to_text(&self) -> String;
9
10 fn add_recursive(&mut self, new_value: Value);
12
13 fn override_recursive(&mut self, new_value: Value);
15}
16
17impl JSON for Value {
18 fn to_text(&self) -> String {
19 if let serde_json::Value::String(value) = self {
20 value.clone()
21 } else {
22 self.to_string()
23 }
24 }
25
26 fn add_recursive(&mut self, new_value: Value) {
27 let value = self;
28 match value {
29 Value::Object(map) => {
30 if let Value::Object(new_map) = new_value {
31 for (key, new_value) in new_map {
32 if let Some(value) = map.get_mut(&key) {
33 value.add_recursive(new_value);
34 } else {
35 map.insert(key, new_value);
36 }
37 }
38 }
39 }
40 Value::Array(array) => {
41 if let Value::Array(new_array) = new_value {
42 for new_value in new_array.into_iter() {
43 array.push(new_value);
44 }
45 }
46 }
47 _ => *value = new_value
48 }
49 }
50
51 fn override_recursive(&mut self, new_value: Value) {
52 let value = self;
53 match value {
54 Value::Object(map) => {
55 if let Value::Object(new_map) = new_value {
56 for (key, new_value) in new_map {
57 if let Some(value) = map.get_mut(&key) {
58 value.override_recursive(new_value);
59 } else {
60 map.insert(key, new_value);
61 }
62 }
63 }
64 }
65 Value::Array(array) => {
66 if let Value::Array(new_array) = new_value {
67 for (index, new_value) in new_array.into_iter().enumerate() {
68 if let Some(value) = array.get_mut(index) {
69 value.override_recursive(new_value);
70 } else {
71 array.push(new_value);
72 }
73 }
74 }
75 }
76 _ => *value = new_value
77 }
78 }
79}