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_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