mergeme_derive

Crates.iomergeme_derive
lib.rsmergeme_derive
version0.2.0
created_at2025-05-04 19:03:00.256825+00
updated_at2025-05-06 15:07:48.94892+00
descriptionA derivable trait that assists with merging data together
homepage
repositoryhttps://github.com/BD103/mergeme
max_upload_size
id1659861
size20,578
BD103 (BD103)

documentation

https://docs.rs/mergeme

README

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.

Commit count: 35

cargo fmt