light_enum

Crates.iolight_enum
lib.rslight_enum
version0.2.2
sourcesrc
created_at2023-10-31 03:10:35.39668
updated_at2023-11-15 16:52:20.295364
descriptionprovide a derive keyword to generate a light enum
homepage
repositoryhttps://github.com/wiiznokes/light_enum
max_upload_size
id1019319
size10,354
(wiiznokes)

documentation

README

light_enum

crates.io docs.rs license ci_status

A crate providing a derive keyword to generate a light enum.

Usage

cargo add light_enum

This crate provide two derive keywords:

  • LightEnum will generate a new enum without the content of each field
  • Values will generate a vector containing each field of the enum

See examples bellow to understand what they do.

LightEnum

use light_enum::LightEnum;

#[derive(LightEnum)]
enum MyEnum {
    A(i32, i32),
    B(i32),
    C,
}

let heavy = MyEnum::A(0, 0);
let light = heavy.to_light();
assert!(light == MyEnumLight::A);

MyEnumLight will be generated:

enum MyEnumLight {
    A,
    B,
    C,
}

Values

use light_enum::Values;

#[derive(Values, PartialEq, Eq)]
enum Vals {
    A,
    B,
    C,
}

let values = Vals::VALUES;
assert!(values.len() == 3);
assert!(values.contains(&Vals::A));
assert!(values.contains(&Vals::B));
assert!(values.contains(&Vals::C));

Generated code:

impl Vals {
    const VALUES: [Vals; 3usize] = [Vals::A, Vals::B, Vals::C];
}

Limitations

Values

Having a field with content will cause an error.

// this code will not compile
#[derive(Values)]
enum MyEnum {
    A(i32),
}

Dev

The cargo expand utility is useful to see what is generated. It can be installed with cargo install cargo-expand.

Commit count: 16

cargo fmt