1 个不稳定版本
| 0.1.0 | 2020 年 9 月 1 日 | 
|---|
#409 在 Rust 模式
18,192 每月下载量
在 35 个 crate (24 直接) 中使用
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_derivecrate。
- num(默认): 启用需要- num_traitscrate 的- num模块中的合并策略。
- std(默认): 启用需要标准库的- vec模块中的合并策略。如果没有设置此特性,则- merge是一个- no_std库。
最低支持的 Rust 版本
此 crate 支持 Rust 1.36.0 或更高版本。
联系
有关错误报告、补丁、功能请求和其他消息,请使用主题行中的 [merge-rs] 前缀通过电子邮件发送到 ~ireas/public-inbox@lists.sr.ht。
许可
本项目采用Apache-2.0和MIT协议双重授权。本仓库包含的文档和配置文件遵循Creative Commons Zero协议。您可以在LICENSES目录中找到许可证文本的副本。
merge-rs符合REUSE规范3.0版本。
依赖项
~0–260KB