#merge #macro-derive #derive #macro #multiple-values

已删除 gabouchet-merge

将多个值合并为一个

0.1.0 2023年1月30日

#26#multiple-values

Apache-2.0 OR MIT

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(默认):启用 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.0MIT许可证双授权。本项目仓库中包含的文档和配置文件根据Creative Commons Zero许可证授权。您可以在LICENSES目录中找到许可证文本。

merge-rs符合REUSE规范3.0版本

依赖项

~0–260KB