#enums #derive #from #into

macro into_enum

Rust macro to generate trivial From impls

1 unstable release

0.1.0 Dec 8, 2024

#1541 in Data structures

Download history 128/week @ 2024-12-02 46/week @ 2024-12-09

174 downloads per month

MIT-CMU license

6KB
79 lines

into_enum

into_enum provides a single macro, IntoEnum.

Enums with unique variants can derive IntoEnum to provide straight-forward From implementations.

use into_enum::IntoEnum;

#[derive(IntoEnum)]
enum MyError {
    IO(std::io::Error),         // impl From<std::io::Error> for MyError
    Reqwest(reqwest::Error),    // impl From<reqwest::Error> for MyError
    Custom(crate::Error),       // impl From<crate::Error> for MyError
}

The macro provides the attribute into_enum(skip) to ignore a variant, in case of type conflict or unwanted conversion.

#[derive(IntoEnum)]
enum Results {
    Default(u32),       // impl From<u32> for Results
    #[into_enum(skip)]
    Special(u32),       // nothing generated
    Message(String),    // impl From<String> for Results
}

The macro also generates conversions for unit variants and tuple variants. Variants with named fields are skipped.

#[derive(IntoEnum)]
enum Numerical {
    Default,                // impl From<()> for Numerical
    Number(u32),            // impl From<u32> for Numerical
    Double(u32, u32),       // impl From<(u32, u32)> for Numerical
    Complex { base: u32 }   // Nothing generated
}

The macro maintains trait bounds for generic types.

Dependencies

~195–620KB
~15K SLoC