#enums #labelled-generic #macro-derive #traits #frunk #variant #type

frunk-enum-derive

派生宏以在枚举上实现frunk::LabelledGeneric特质

3个不稳定版本

0.3.0 2023年11月15日
0.2.1 2021年3月3日
0.2.0 2019年5月13日

#330 in 过程宏

Download history 347/week @ 2024-03-13 377/week @ 2024-03-20 465/week @ 2024-03-27 514/week @ 2024-04-03 415/week @ 2024-04-10 354/week @ 2024-04-17 428/week @ 2024-04-24 396/week @ 2024-05-01 365/week @ 2024-05-08 539/week @ 2024-05-15 458/week @ 2024-05-22 474/week @ 2024-05-29 501/week @ 2024-06-05 489/week @ 2024-06-12 373/week @ 2024-06-19 380/week @ 2024-06-26

1,810 每月下载量
用于 18 crates

MIT/Apache

14KB
214 代码行

Frunk 枚举支持

Crates.io - frunk-enum License: MIT/APACHE-2.0

用法

这些crates增强了frunk crate,允许将enum以及struct进行transmogrification。有关transmogrification和基于其的LabelledGeneric特质更多信息,请参阅https://docs.rs/frunk/latest/frunk/#transmogrifyinghttps://docs.rs/frunk/latest/frunk/labelled/trait.LabelledGeneric.html

为了利用此功能,您需要对自有的枚举

  • Cargo.toml中将frunk-enum-derive添加为[dev-dependency]

  • 使用自定义派生标记枚举

    #[derive(LabelledGenericEnum)]
    enum Foo {
        Bar(String),
        Baz { name: String, id: Identity },
    }
    
  • frunk-enum-corefrunk-core crates添加为[dependency]条目到您的Cargo.toml

  • 然后(假设有一个与Foo具有相同结构的NewFoo枚举)您可以编写

    let foo = Foo::Baz { name: "Andy".into(), id: Identity };
    let new_foo: NewFoo = foo.transmogrify();
    

这是通过为Foo派生一个LabelledGeneric实现来实现的,它允许将实例转换为泛型求和类型并从泛型求和类型转换。核心crate提供了在变体体递归可transmogrification之间进行转换的工具。这允许在类型之间进行任意深度的转换,特别是在两个类型都是来自某些公共输入文件自动生成的,但被认为是不同类型的情况下非常有用(例如,因为它们在不同的crate中)。

贡献

感谢您对frunk-enum感兴趣,我们欢迎所有贡献,无论是问题报告、功能请求还是代码贡献。

问题贡献

在提交问题时,请提供问题描述、frunk和frunk-enum的版本以及展示问题的示例代码。

代码贡献

如果您希望向frunk-enum贡献代码,您可以通过github的pull request来这样做,但是您需要签署每个提交,以表明您遵守DCO条款。


lib.rs:

此crate添加了LabelledGenericEnum derive,它将枚举与frunk转换函数集成。

依赖项

~2MB
~48K SLoC