Crate merge2

Source
Expand description

Provides Merge trait that can be used to merge structs into single by it’s values:

trait Merge: Sized {
    fn merge(&mut self, other: &mut Self);
}

§Usage

The Merge trait can be used to merge two structs into single by values. The example use case is merging configuration from different sources: environment variables, multiple configuration files and command-line arguments, see the args.rs example.

Merge can be derived for structs. Also you can provide custom merge strategies for any fields that don’t implement Merge trait. A merge strategy is a function with the signature fn merge<T>(left: &mut T, right: &mut T) that merges right into left. The submodules of this crate provide strategies for the most common types, but you can also define your own strategies.

§Features

This crate has the following features:

  • derive (default): Enables the derive macro for the Merge trait using the merge_derive crate.
  • num: Enables the merge strategies in the num module that require the num_traits crate.
  • std (default): Enables the merge strategies in the hashmap and vec modules that require the standard library. If this feature is not set, merge2 is a no_std.

§Example

use merge2::Merge;

#[derive(Merge)]
struct User {
    // Fields with the skip attribute are skipped by Merge
    #[merge(skip)]
    pub name: &'static str,
    pub location: Option<&'static str>,

    // The strategy attribute is used to customize the merge behavior
    #[merge(strategy = ::merge2::vec::append)]
    pub groups: Vec<&'static str>,
}

let mut defaults = User {
    name: "",
    location: Some("Internet"),
    groups: vec!["rust"],
};
let mut ferris = User {
    name: "Ferris",
    location: None,
    groups: vec!["mascot"],
};
ferris.merge(&mut defaults);

assert_eq!("Ferris", ferris.name);
assert_eq!(Some("Internet"), ferris.location);
assert_eq!(vec!["mascot", "rust"], ferris.groups);

Modules§

any
Merge strategies applicable to any types
bool
Merge strategies for bool
hashmapstd
Merge strategies for HashMap
numnum
Merge strategies for numeric types
option
Merge strategies for Option
ord
Merge strategies for types that can be compared (PartialOrd)
stringstd
Merge strategies for String
vecstd
Merge strategies for Vec

Traits§

Merge
A trait for objects that can be merged.

Derive Macros§

Mergederive