use serde_json::Value;
pub(crate) fn json_merge_patch(target: &mut Value, patch: &Value) {
let is_both_objects = matches!(target, Value::Object(_)) && matches!(patch, Value::Object(_));
if is_both_objects {
if let (Value::Object(target_map), Value::Object(patch_map)) = (target, patch) {
for (key, patch_value) in patch_map {
if patch_value.is_null() {
} else if let Some(target_value) = target_map.get_mut(key) {
json_merge_patch(target_value, patch_value);
} else {
target_map.insert(key.clone(), patch_value.clone());
}
}
}
} else {
*target = patch.clone();
}
}