serde_merge 0.1.0

Simple utility to merge some serializable data types.
Documentation

SERDE MERGE

Simple utility to merge some serializable data types based on serde.

Quick Start

HashMap with HashMap

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",
    //     ),
    // }
}

Struct with struct

use serde::{Deserialize, Serialize};
use serde_merge::tmerge;

#[derive(Serialize, Deserialize)]
struct Foo {
    pub field1: String,
    pub field2: i32,
}

#[derive(Serialize, Deserialize)]
struct Bar {
    pub field3: Vec<String>,
    pub field4: u32,
}

#[derive(Debug, Serialize, Deserialize)]
struct Result {
    pub field1: String,
    pub field2: i32,
    pub field3: Vec<String>,
    pub field4: u32,
}

fn main() {
    let foo = Foo {
        field1: "field1".to_string(),
        field2: 15,
    };
    let bar = Bar {
        field3: Vec::from([
            "elem1".to_string(),
            "elem2".to_string(),
            "elem3".to_string(),
        ]),
        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,
    // }
}

Note

Merging structs require derive feature for serde.