#derive #no-std

macro no-std mergeme_derive

A derivable trait that assists with merging data together

2 releases

Uses new Rust 2024

new 0.1.1 May 5, 2025
0.1.0 May 4, 2025

#901 in Configuration

33 downloads per month
Used in mergeme

MIT/Apache

14KB
139 lines

Merge Me!

A derivable trait that assists with merging data together.

This crate provides the Merge trait and derive macro. The trait is a simple interface for combining data together, while the derive macro lets you easily implement this trait for any struct.

Installation

You can install mergeme with cargo add:

cargo add mergeme

If you do not need #[derive(Merge)] and wish to avoid depending on syn, you may disable the default features:

cargo add mergeme --no-default-features

Once you have installed mergeme, be sure to read the documentation for both the trait and the derive macro. Their interfaces are simple and their docs are extensive!

Merging in Action

use mergeme::Merge;

#[derive(Merge)]
#[partial(PartialPerson)]
struct Person {
    name: String,
    age: u16,
    #[strategy(merge)]
    friends: Vec<String>,
}

let person = Person {
    name: "Janette".to_string(),
    age: 19,
    friends: vec!["Lou".to_string()],
};

// Change Janette's age to be 25 and add a friend, but preserve her original name.
let partial = PartialPerson {
    name: None,
    age: Some(25),
    friends: Some(vec!["Kylie".to_string()]),
};

let merged = person.merge(partial);

assert_eq!(merged.name, "Janette");
assert_eq!(merged.age, 25);
assert_eq!(merged.friends, ["Lou", "Kylie"]);

License

mergme is licensed under either of

at your option.

Contributing

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.

Dependencies

~190–620KB
~15K SLoC