IntEnum

Trait IntEnum 

Source
pub trait IntEnum: Copy {
    type Int: PrimInt;

    // Required methods
    fn int_value(self) -> Self::Int;
    fn from_int(n: Self::Int) -> Result<Self, IntEnumError<Self>>
       where Self: Sized;
}
Expand description

Trait used for implementations of integer and enum conversions.

§Examples

Basic usage:

use int_enum::IntEnum;

#[repr(u8)]
#[derive(Clone, Copy, Debug, Eq, PartialEq, IntEnum)]
pub enum SmallInt {
    One = 1,
    Two = 2,
}

assert_eq!(1, SmallInt::One.int_value());
assert_eq!(2, SmallInt::Two.int_value());

assert_eq!(SmallInt::One, SmallInt::from_int(1)?);
assert_eq!(SmallInt::Two, SmallInt::from_int(2)?);

assert!(SmallInt::from_int(5).is_err());

Serde support (requires feature serialize):

use int_enum::IntEnum;

#[repr(i8)]
#[derive(Clone, Copy, Debug, Eq, PartialEq, IntEnum)]
enum Num {
    MinusThree = -3,
    Zero = 0,
    Five = 5,
}

assert_eq!("-3", serde_json::to_string(&Num::MinusThree)?);
assert_eq!("0", serde_json::to_string(&Num::Zero)?);
assert_eq!("5", serde_json::to_string(&Num::Five)?);

assert_eq!(Num::MinusThree, serde_json::from_str("-3")?);
assert_eq!(Num::Zero, serde_json::from_str("0")?);
assert_eq!(Num::Five, serde_json::from_str("5")?);

assert!(serde_json::from_str::<Num>("4").is_err());

From and TryFrom support (requires convert feature):

use std::convert::TryFrom;
use int_enum::IntEnum;

#[repr(u16)]
#[derive(Clone, Copy, Debug, Eq, PartialEq, IntEnum)]
enum Value {
    A = 1_000,
    B = 1_001,
    C = 1_002,
}

assert_eq!(1_000, u16::from(Value::A));
assert_eq!(1_001, u16::from(Value::B));
assert_eq!(1_002, u16::from(Value::C));

assert_eq!(Value::A, Value::try_from(1_000)?);
assert_eq!(Value::B, Value::try_from(1_001)?);
assert_eq!(Value::C, Value::try_from(1_002)?);

assert!(Value::try_from(2_000).is_err());

Required Associated Types§

Source

type Int: PrimInt

Primitive integer type for conversions.

Required Methods§

Source

fn int_value(self) -> Self::Int

Returns the integer value of the enum.

Source

fn from_int(n: Self::Int) -> Result<Self, IntEnumError<Self>>
where Self: Sized,

Attempts to convert an integer into the enum.

§Errors

If n is not a variant in the enum.

Dyn Compatibility§

This trait is not dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.

Implementors§