#frunk #enum

frunk-enum-core

Implemenation of genericized enums for use with frunk

2 releases

0.2.1 Mar 3, 2021
0.2.0 May 13, 2019

#757 in Rust patterns

Download history 185/week @ 2022-08-07 146/week @ 2022-08-14 220/week @ 2022-08-21 223/week @ 2022-08-28 231/week @ 2022-09-04 286/week @ 2022-09-11 503/week @ 2022-09-18 596/week @ 2022-09-25 422/week @ 2022-10-02 266/week @ 2022-10-09 223/week @ 2022-10-16 251/week @ 2022-10-23 533/week @ 2022-10-30 355/week @ 2022-11-06 257/week @ 2022-11-13 255/week @ 2022-11-20

1,433 downloads per month
Used in fewer than 17 crates

MIT/Apache

5KB
55 lines

Frunk Enum Support

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

Usage

These crates augment the frunk crate to allow transmogrification of enums as well as structs. For more information on transmogrification and the LabelledGeneric trait it's based around, see https://docs.rs/frunk/latest/frunk/#transmogrifying and https://docs.rs/frunk/latest/frunk/labelled/trait.LabelledGeneric.html.

To take advantage of this feature for your own enum you need to:

  • Add the frunk-enum-derive crate to your Cargo.toml

  • Mark the enum with the custom derive:

    #[derive(LabelledGenericEnum)]
    enum Foo {
        Bar(String),
        Baz { name: String, id: Identity },
    }
    
  • Add the frunk-enum-core and frunk-core crates to your Cargo.toml

  • Then (assuming there's a NewFoo enum with the same structure as Foo) you can write:

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

This works by deriving an implementation of LabelledGeneric for Foo which allows conversion to and from an instance of a generic sum-type. The core crate provides tools for converting between these generic sum-types where the bodies of the variants are recursively transmogrifiable. This allows for arbitrarily deep conversion between types, especially useful where the two types in question are autogenerated from some common input file, but are deemed to be different types by the rust compiler (e.g. because they're in separate crates).

Contributing

Thank you for your interest in frunk-enum, all contributions are welcome whether they be reports of issues, feature requests or code contributions.

Issue Contribution

When opening issues please provide a description of the issue, the version of frunk and frunk-enum plus example code which exhibits the issue.

Code Contribution

If you wish to contribute code to frunk-enum, you are welcome to do so using a github pull request, however you will need to sign each commit, to indicate that you are abiding to the terms of the DCO.

Dependencies

~2MB
~47K SLoC