2个不稳定版本

0.3.0 2023年12月27日
0.2.0 2023年12月26日

#2160Rust模式

Download history 17/week @ 2024-03-09 4/week @ 2024-03-16 2/week @ 2024-03-23 42/week @ 2024-03-30 57/week @ 2024-04-06 90/week @ 2024-04-13 67/week @ 2024-04-20 13/week @ 2024-04-27 2/week @ 2024-05-04 4/week @ 2024-05-11 23/week @ 2024-05-18 16/week @ 2024-05-25 26/week @ 2024-06-01 13/week @ 2024-06-08 22/week @ 2024-06-15 14/week @ 2024-06-22

77 每月下载次数

MIT/Apache

17KB
215

合并2

Crate API

提供Merge特质,可用于通过值将结构体合并为单个

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

Merge可以为结构体派生

use merge2::Merge;

#[derive(Merge)]
struct User {
    #[merge(skip)]
    pub name: &'static str,
    pub location: Option<&'static str>,
    #[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);

合并策略是一个具有以下签名的函数:fn merge<T>(left: &mut T, right: &mut T),该函数将right合并到left中。`merge2` crate提供最常见的类型的策略,但您也可以定义自己的策略。

该特质可用于合并来自不同来源的配置:环境变量、多个配置文件和命令行参数,请参见`args.rs`示例。

功能

此crate具有以下功能

  • derive(默认):启用Merge特质的派生宏,使用merge_derive crate。
  • num(默认):启用num模块中的合并策略,这些策略需要num_traits crate。
  • std(默认):启用需要标准库的hashmapvec的合并策略。如果未设置此功能,则merge2no_std

基于Merge crate的源代码

依赖关系

~175KB