Skip to content

hansl/merge-rs

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

33 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

merge-rs

The merge crate provides the Merge trait that can be used to merge multiple values into one:

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

Merge can be derived for structs:

use merge::Merge;

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

    // The strategy attribute is used to select the merge behavior
    #[merge(strategy = merge::option::overwrite_none)]
    pub location: Option<&'static str>,

    #[merge(strategy = merge::vec::append)]
    pub groups: Vec<&'static str>,
}

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

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

A merge strategy is a function with the signature fn merge<T>(left: &mut T, right: T) that merges right into left. The merge crate provides strategies for the most common types, but you can also define your own strategies.

The trait can be used to merge configuration from different sources, for example environment variables, multiple configuration files and command-line arguments, see the args.rs example.

Features

This crate has the following features:

  • derive (default): Enables the derive macro for the Merge trait using the merge_derive crate.
  • num (default): 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, merge is a no_std library.

Minimum Supported Rust Version

This crate supports Rust 1.36.0 or later.

Contact

This fork can be found at https://github.com/hansl/merge-rs.

License

This project is dual-licensed under the Apache-2.0 and MIT licenses. The documentation and configuration files contained in this repository are licensed under the Creative Commons Zero license. You can find a copy of the license texts in the LICENSES directory.

merge-rs complies with version 3.0 of the REUSE specification.

About

Rust merge crate repository

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Languages