Crate merge_struct
source · [−]Expand description
merge-struct
is a simple library for deep merging two serializable structs.
Examples
Deserialize two structs and merge them
use std::collections::BTreeMap;
use serde_json;
use serde::{Deserialize, Serialize};
use merge_struct::merge;
#[derive(Serialize, Deserialize)]
struct Data {
is_root: Option<bool>,
folders: Vec<Folder>,
entries: Option<BTreeMap<String, Entry>>, // btree so test results will be ordered and stable between runs
}
#[derive(Serialize, Deserialize)]
struct Folder {
name: String,
num_files: Option<u32>,
}
#[derive(Serialize, Deserialize)]
struct Entry {
name: String,
size: u32,
}
let left: Data = serde_json::from_str(
r###"
{
"is_root": false,
"entries": {
"/var/log/f2": {
"name":"f2",
"size": 5
}
},
"folders": [
{
"name": "/var/log",
"num_files": 20
}
]
}
"###,
)
.unwrap();
let right: Data = serde_json::from_str(
r###"
{
"folders":[],
"entries": {
"/var/log/f1": {
"name":"f1",
"size": 12
}
}
}
"###,
)
.unwrap();
let res = merge(&left, &right);
Functions
deep merge two structs that are serializable. based on turning them into json::Value and merging that.