#enums #impl #proc-macro

macro enum-impl

A Rust procedural macro auto-generating common methods on enums

1 unstable release

0.1.0 Jan 6, 2024

#1720 in Procedural macros


Used in meplang

MIT/Apache

30KB
763 lines

enum-impl

enum-impl is a Rust procedural macro that simplifies working with enums by generating common methods and traits for each variant. This helps reduce boilerplate code and enhances the ergonomics of using enums in your Rust projects.

Features

  • [pub] as_ref [= "rename"] Generates a method that returns an immutable reference to the associated data of the enum variant.
  • [pub] as_ref_mut [= "rename"] Generates a method that returns a mutable reference to the associated data of the enum variant.
  • [pub] from [= "rename"] Generates a method that creates an instance of the enum variant from the associated data.
  • impl from Implements the From trait for the enum, creating an instance of the enum variant from the associated data.
  • [pub] into [= "rename"] Generates a method that converts the enum into the variant associated data.
  • [pub] is [= "rename"] Generates a method that returns a boolean indicating whether the enum instance matches the specified variant.

Usage

Add enum-impl to your Cargo.toml:

[dependencies]
enum-impl = "0.1"

In your Rust code:

use enum_impl::EnumImpl;

#[derive(EnumImpl)]
enum YourEnum {
    #[enum_impl(pub is)]
    Variant1,
    #[enum_impl(pub as_ref, as_ref_mut, impl from)]
    Variant2(i32),
    // ... add attributes to other variants as needed
}

fn main() {
    let instance = YourEnum::Variant1;

    // Use generated methods on enum instances
    assert!(instance.is_variant_1());

    let variant2_instance = YourEnum::from(42);
    assert_eq!(*variant2_instance.as_variant_2().unwrap(), 42);
}

More examples can be found in examples.

Dependencies

~0.9–1.4MB
~27K SLoC