Simple utility to merge some serializable data types based on serde.
```rust use serde_merge::mmerge; use std::collections::HashMap;
fn main() { let mut map1: HashMap<&str, &str> = HashMap::new(); map1.insert("key1", "value1"); map1.insert("key2", "value2"); map1.insert("key3", "value3"); let mut map2: HashMap<&str, &str> = HashMap::new(); map2.insert("key4", "value4"); map2.insert("key5", "value5"); map2.insert("key6", "value6"); let result = mmerge(map1, map2).unwrap(); println!("{:#?}", result); // --Output-- // { // "key1": String( // "value1", // ), // "key2": String( // "value2", // ), // "key3": String( // "value3", // ), // "key4": String( // "value4", // ), // "key5": String( // "value5", // ), // "key6": String( // "value6", // ), // } } ```
```rust use serde::{Deserialize, Serialize}; use serde_merge::tmerge;
struct Foo { pub field1: String, pub field2: i32, }
struct Bar {
pub field3: Vec
struct Result {
pub field1: String,
pub field2: i32,
pub field3: Vec
fn main() { let foo = Foo { field1: "field1".tostring(), field2: 15, }; let bar = Bar { field3: Vec::from([ "elem1".tostring(), "elem2".tostring(), "elem3".tostring(), ]), field4: 5, }; // unwrap is not recommended, handle Result in your app let result: Result = tmerge(foo, bar).unwrap(); println!("{:#?}", result); // --Output-- // Result { // field1: "field1", // field2: 15, // field3: [ // "elem1", // "elem2", // "elem3", // ], // field4: 5, // } } ```
Merging structs require derive
feature for serde
.
```rust use serde::{Deserialize, Serialize}; use serde_merge::omerge;
struct HasOptional {
field1: i32,
field2: Option
pub fn main() { let s1 = HasOptional { field1: 1, field2: None, field3: Some("3".tostring()), }; let s2 = HasOptional { field1: 2, field2: Some(true), field3: None, }; let result: HasOptional = omerge(s1, s2).unwrap(); let target = HasOptional { field1: 2, field2: Some(true), field3: Some("3".tostring()), }; assert_eq!(result, target); // true } ```