1 个不稳定版本
0.1.0 | 2021年9月6日 |
---|
#7 在 #可能
8,660 每月下载次数
在 3 个crate中使用了 (通过 enum_to_enum)
38KB
723 行
enum_to_enum —
enum_to_enum暴露了一个派生宏,可以轻松生成可能具有效果的枚举到枚举的转换:#[derive(FromEnum)]
。
何时使用enum_to_enum?
许多转换流水线可以轻松地表达为从一个枚举到另一个枚举的转换。然而,这些转换可能很繁琐,尤其是如果它们除了数据映射之外还生成一些额外的效果。enum_to_enum可以轻松生成这些转换。
enum_to_enum应用实例
显示 cargo.toml
[dependencies]
enum_to_enum = "0.1.0"
use enum_to_enum::FromEnum;
#[derive(Debug)]
enum Src {
Case1(),
Case2(SrcStrField),
Case3 { a: SrcStrField, b: u8 },
}
#[derive(FromEnum, Debug, PartialEq, Eq)]
#[from_enum(Src)]
enum Dest {
Case1(),
#[from_case(Case2)]
DestCase2(DestStrField),
#[from_case(Src = Case3)]
DestCase3 { a: DestStrField, b: u8 },
}
#[derive(Debug, PartialEq, Eq)]
struct SrcStrField(String);
#[derive(Debug, PartialEq, Eq)]
struct DestStrField(String);
impl From<SrcStrField> for DestStrField {
fn from(src: SrcStrField) -> DestStrField {
DestStrField(src.0 + " world")
}
}
assert_eq!(
Dest::from(Src::Case1()),
Dest::Case1(),
);
assert_eq!(
Dest::from(Src::Case2(SrcStrField(String::from("hello")))),
Dest::DestCase2(DestStrField(String::from("hello world"))),
);
assert_eq!(
Dest::from(Src::Case3 {
a: SrcStrField(String::from("hello")),
b: 100u8,
}),
Dest::DestCase3 {
a: DestStrField(String::from("hello world")),
b: 100u8,
},
);
许可证
根据您的选择,许可协议为Apache License, Version 2.0或MIT license。除非您明确说明,否则您提交给enum_to_enum的任何有意贡献,根据Apache-2.0许可证定义,将按照上述方式双重许可,而无需任何附加条款或条件。
依赖项
~1.5MB
~35K SLoC