1 个不稳定版本
0.1.0 | 2021 年 9 月 6 日 |
---|
#2004 在 Rust 模式
10,198 每月下载
在 2 个 crate 中使用 (通过 ts-bindgen-gen)
11KB
90 行
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 许可证,您可以选择。除非您明确说明,否则您提交给 enum_to_enum 的任何有意贡献,根据 Apache-2.0 许可证的定义,均应以上述双许可方式发布,不附加任何额外条款或条件。
依赖关系
~1.5MB
~35K SLoC