Crate discrim

source ·
Expand description

Automatically initialize enum variants by discriminant.

This crate provides the FromDiscriminant trait and associated derive macro for automatically generating code to initialize enum values from their discriminant.

Basically, for fieldless, non-generic enums with a #[repr(...)] specified, the derive macro generates the giant match block required to initialize the enum from a discriminant value as an implementation of FromDiscriminant.

Usage

Given an enum that fits these constraints:

use discrim::FromDiscriminant;

#[derive(Debug, FromDiscriminant, PartialEq)]
#[repr(u8)]
enum Opcode {
    Add, Sub, Mul, Div
}

assert_eq!(Opcode::from_discriminant(2), Ok(Opcode::Mul));
assert_eq!(Opcode::from_discriminant(5), Err(5));

Traits

Derive Macros