3 个版本
| 0.1.2 | 2023年2月18日 |
|---|---|
| 0.1.1 | 2023年2月18日 |
| 0.1.0 | 2023年2月18日 |
972 在 Rust 模式
156 每月下载量
用于 wot_game_reader
19KB
109 行
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_derivecrate 的 derive 宏来为Mergetrait 提供支持。num(默认):启用需要num_traitscrate 的num模块中的合并策略。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