2个不稳定版本
0.3.0 | 2023年12月27日 |
---|---|
0.2.0 | 2023年12月26日 |
#2160 在 Rust模式
77 每月下载次数
17KB
215 行
合并2
提供Merge
特质,可用于通过值将结构体合并为单个
trait Merge: Sized {
fn merge(&mut self, other: &mut Self);
}
Merge
可以为结构体派生
use merge2::Merge;
#[derive(Merge)]
struct User {
#[merge(skip)]
pub name: &'static str,
pub location: Option<&'static str>,
#[merge(strategy = ::merge2::vec::append)]
pub groups: Vec<&'static str>,
}
let mut defaults = User {
name: "",
location: Some("Internet"),
groups: vec!["rust"],
};
let mut ferris = User {
name: "Ferris",
location: None,
groups: vec!["mascot"],
};
ferris.merge(&mut 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: &mut T)
,该函数将right
合并到left
中。`merge2` crate提供最常见的类型的策略,但您也可以定义自己的策略。
该特质可用于合并来自不同来源的配置:环境变量、多个配置文件和命令行参数,请参见`args.rs
`示例。
功能
此crate具有以下功能
derive
(默认):启用Merge
特质的派生宏,使用merge_derive
crate。num
(默认):启用num
模块中的合并策略,这些策略需要num_traits
crate。std
(默认):启用需要标准库的hashmap
和vec
的合并策略。如果未设置此功能,则merge2
为no_std
。
基于Merge
crate的源代码
依赖关系
~175KB