| 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(默认):启用Mergetrait 的 derive 宏,使用merge_derivecrate。num(默认):启用num模块中的合并策略,这些策略需要num_traitscrate。std(默认):启用hashmap和vec模块中的合并策略,这些策略需要标准库。如果未设置此功能,则merge是一个no_std库。
最低支持的Rust版本
此crate支持 Rust 1.36.0 或更高版本。
联系方式
有关错误报告、补丁、功能请求和其他消息,请通过邮件发送至 ~ireas/public-inbox@lists.sr.ht(存档)使用主题中的 [merge-rs] 前缀。
您可以使用 git send-email 提交补丁,例如
git send-email --to=~ireas/public-inbox@lists.sr.ht --subject-prefix="PATCH merge-rs"
请在主题前加上 PATCH merge-rs,以便CI自动运行。
许可证
本项目根据Apache-2.0和MIT许可证双授权。本项目仓库中包含的文档和配置文件根据Creative Commons Zero许可证授权。您可以在LICENSES目录中找到许可证文本。
merge-rs符合REUSE规范3.0版本。
依赖项
~0–260KB