#枚举 #宏派生 #转换 #生成 #效果 #可能 #枚举-枚举

enum_to_enum_derive

为enum_to_enum提供的派生宏实现。enum_to_enum可以派生枚举之间的可能具有效果的转换。

1 个不稳定版本

0.1.0 2021年9月6日

#7#可能

Download history 2011/week @ 2024-03-15 2204/week @ 2024-03-22 2189/week @ 2024-03-29 1919/week @ 2024-04-05 1916/week @ 2024-04-12 2155/week @ 2024-04-19 1822/week @ 2024-04-26 1781/week @ 2024-05-03 1782/week @ 2024-05-10 1797/week @ 2024-05-17 1910/week @ 2024-05-24 2300/week @ 2024-05-31 1930/week @ 2024-06-07 1958/week @ 2024-06-14 2690/week @ 2024-06-21 1543/week @ 2024-06-28

8,660 每月下载次数
3 个crate中使用了 (通过 enum_to_enum)

MIT/Apache

38KB
723

enum_to_enum — CI

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.0MIT license
除非您明确说明,否则您提交给enum_to_enum的任何有意贡献,根据Apache-2.0许可证定义,将按照上述方式双重许可,而无需任何附加条款或条件。

依赖项

~1.5MB
~35K SLoC