0.1.0 |
|
---|
#26 在 #multiple-values
19KB
106 行
merge-rs
merge
crate 提供了一个 Merge
trait,可以用于将多个值合并为一个
trait Merge {
fn merge(&mut self, other: Self);
}
Merge
可以用于结构体进行派生
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);
合并策略是一个具有以下签名的函数 fn merge<T>(left: &mut T, right: T)
,将 right
合并到 left
中。 merge
crate 提供了最常见的类型的策略,但您也可以定义自己的策略。
该trait可以用于合并来自不同来源的配置,例如环境变量、多个配置文件和命令行参数,请参见 args.rs
示例。
特性
此crate具有以下特性
derive
(默认):启用Merge
trait 的 derive 宏,使用merge_derive
crate。num
(默认):启用num
模块中的合并策略,这些策略需要num_traits
crate。std
(默认):启用hashmap
和vec
模块中的合并策略,这些策略需要标准库。如果未设置此功能,则merge
是一个no_std
库。
最低支持的Rust版本
此crate支持 Rust 1.36.0 或更高版本。
联系方式
有关错误报告、补丁、功能请求和其他消息,请通过邮件发送至 ~ireas/[email protected](存档)使用主题中的 [merge-rs]
前缀。
您可以使用 git send-email
提交补丁,例如
git send-email --to=~ireas/[email protected] --subject-prefix="PATCH merge-rs"
请在主题前加上 PATCH merge-rs
,以便CI自动运行。
许可证
本项目根据Apache-2.0和MIT许可证双授权。本项目仓库中包含的文档和配置文件根据Creative Commons Zero许可证授权。您可以在LICENSES
目录中找到许可证文本。
merge-rs
符合REUSE规范3.0版本。
依赖项
~0–260KB