discrim 0.1.0

Construct enum variants from their tag
Documentation

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));