| Crates.io | mergeme |
| lib.rs | mergeme |
| version | 0.2.0 |
| created_at | 2025-05-04 19:06:54.014923+00 |
| updated_at | 2025-05-06 15:07:59.168621+00 |
| description | A derivable trait that assists with merging data together |
| homepage | |
| repository | https://github.com/BD103/mergeme |
| max_upload_size | |
| id | 1659862 |
| size | 36,675 |
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.
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!
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"]);
mergme is licensed under either of
at your option.
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.