Skip to content

wiiznokes/light_enum

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

17 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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.