mergeme 0.1.0

A derivable trait that assists with merging data together
Documentation
  • Coverage
  • 100%
    4 out of 4 items documented4 out of 4 items with examples
  • Size
  • Source code size: 23.91 kB This is the summed size of all the files inside the crates.io package for this release.
  • Documentation size: 323.33 kB This is the summed size of all files generated by rustdoc for all configured targets
  • Ø build duration
  • this release: 11s Average build duration of successful builds.
  • all releases: 13s Average build duration of successful builds in releases after 2024-10-23.
  • Links
  • BD103/mergeme
    0 0 1
  • crates.io
  • Dependencies
  • Versions
  • Owners
  • BD103

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.