use serde_json::Value;
pub fn merge(destination: &mut Value, sources: &[&Value]) -> Value {
for source in sources {
if let (Some(destination_obj), Some(source_obj)) =
(destination.as_object_mut(), source.as_object())
{
for (key, value) in source_obj {
if let Some(destination_value) = destination_obj.get_mut(key) {
merge(destination_value, &[value]);
} else {
destination_obj.insert(key.clone(), value.clone());
}
}
} else if let (Some(destination_arr), Some(source_arr)) =
(destination.as_array_mut(), source.as_array())
{
for (index, source_value) in source_arr.iter().enumerate() {
if index < destination_arr.len() {
if let Some(destination_value) = destination_arr.get_mut(index) {
merge(destination_value, &[source_value]);
}
} else {
destination_arr.push(source_value.clone());
}
}
}
}
destination.clone()
}