3 个版本

0.1.2 2023年2月18日
0.1.1 2023年2月18日
0.1.0 2023年2月18日

972Rust 模式

Download history 42/week @ 2024-03-12 107/week @ 2024-03-19 95/week @ 2024-03-26 147/week @ 2024-04-02 63/week @ 2024-04-09 46/week @ 2024-04-16 47/week @ 2024-04-23 48/week @ 2024-04-30 22/week @ 2024-05-07 6/week @ 2024-05-14 29/week @ 2024-05-21 73/week @ 2024-05-28 28/week @ 2024-06-04 57/week @ 2024-06-11 48/week @ 2024-06-18 21/week @ 2024-06-25

156 每月下载量
用于 wot_game_reader

Apache-2.0 OR MIT

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_derive crate 的 derive 宏来为 Merge trait 提供支持。
  • num(默认):启用需要 num_traits crate 的 num 模块中的合并策略。
  • std(默认):启用需要标准库的 hashmapvec 模块中的合并策略。如果未设置此功能,则 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