MCPcopy Create free account
hub / github.com/NodeDB-Lab/nodedb / diff_objects

Function diff_objects

nodedb/src/event/field_diff.rs:192–234  ·  view source on GitHub ↗

Diff two JSON objects field-by-field.

(
    diffs: &mut Vec<FieldDiff>,
    prefix: &str,
    old_map: &serde_json::Map<String, serde_json::Value>,
    new_map: &serde_json::Map<String, serde_json::Value>,
)

Source from the content-addressed store, hash-verified

190
191/// Diff two JSON objects field-by-field.
192fn diff_objects(
193 diffs: &mut Vec<FieldDiff>,
194 prefix: &str,
195 old_map: &serde_json::Map<String, serde_json::Value>,
196 new_map: &serde_json::Map<String, serde_json::Value>,
197) {
198 // Fields in old that are modified or removed in new.
199 for (key, old_val) in old_map {
200 let path = if prefix.is_empty() {
201 key.clone()
202 } else {
203 format!("{prefix}.{key}")
204 };
205 match new_map.get(key) {
206 Some(new_val) => diff_values(diffs, &path, old_val, new_val),
207 None => {
208 diffs.push(FieldDiff {
209 field: path,
210 op: DiffOp::Removed,
211 old_value: Some(old_val.clone()),
212 new_value: None,
213 });
214 }
215 }
216 }
217
218 // Fields in new that were added (not in old).
219 for (key, new_val) in new_map {
220 if !old_map.contains_key(key) {
221 let path = if prefix.is_empty() {
222 key.clone()
223 } else {
224 format!("{prefix}.{key}")
225 };
226 diffs.push(FieldDiff {
227 field: path,
228 op: DiffOp::Added,
229 old_value: None,
230 new_value: Some(new_val.clone()),
231 });
232 }
233 }
234}
235
236/// Diff two JSON arrays element-by-element.
237///

Callers 1

diff_valuesFunction · 0.85

Calls 5

diff_valuesFunction · 0.85
is_emptyMethod · 0.45
cloneMethod · 0.45
getMethod · 0.45
pushMethod · 0.45

Tested by

no test coverage detected