1 个不稳定版本

0.1.0 2020 年 9 月 1 日

#409Rust 模式

Download history 5534/week @ 2024-03-14 5305/week @ 2024-03-21 4286/week @ 2024-03-28 4125/week @ 2024-04-04 4207/week @ 2024-04-11 3934/week @ 2024-04-18 4195/week @ 2024-04-25 4991/week @ 2024-05-02 4986/week @ 2024-05-09 4921/week @ 2024-05-16 3841/week @ 2024-05-23 3745/week @ 2024-05-30 5362/week @ 2024-06-06 4668/week @ 2024-06-13 4031/week @ 2024-06-20 3479/week @ 2024-06-27

18,192 每月下载量
35 个 crate (24 直接) 中使用

Apache-2.0 OR MIT

17KB
64

merge-rs

merge crate 提供了一个可以用来将多个值合并成一个的 Merge 特性。

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

Merge 已为 Option 实现,并且可以为结构体推导。

use merge::Merge;

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

    // The Merge implementation for Option replaces its value if it is None
    pub location: Option<&'static str>,

    // The strategy attribute is used to customize the merge behavior
    #[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);

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

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

特性

此 crate 具有以下特性

  • derive (默认): 启用 Merge 特性的 derive 宏,使用 merge_derive crate。
  • num (默认): 启用需要 num_traits crate 的 num 模块中的合并策略。
  • std (默认): 启用需要标准库的 vec 模块中的合并策略。如果没有设置此特性,则 merge 是一个 no_std 库。

最低支持的 Rust 版本

此 crate 支持 Rust 1.36.0 或更高版本。

联系

有关错误报告、补丁、功能请求和其他消息,请使用主题行中的 [merge-rs] 前缀通过电子邮件发送到 ~ireas/[email protected]

许可

本项目采用Apache-2.0和MIT协议双重授权。本仓库包含的文档和配置文件遵循Creative Commons Zero协议。您可以在LICENSES目录中找到许可证文本的副本。

merge-rs符合REUSE规范3.0版本

依赖项

~0–260KB