enum-utils

crates.io docs.rs Build Status

A set of procedural macros for deriving useful functionality on enums.

See [the API docs] for more information.

[FromStr]

An efficient, configurable FromStr implementation for C-like enums.

```rust

[derive(Debug, PartialEq, enum_utils::FromStr)]

enum Test { Alpha, Beta, }

asserteq!("Alpha".parse(), Ok(Test::Alpha)); asserteq!("Beta".parse(), Ok(Test::Beta)); ```

[IterVariants]

A static method returning an iterator over the variants of an enum.

```rust

[derive(Debug, PartialEq, Eq, enum_utils::IterVariants)]

[repr(u8)]

pub enum Direction { North = 1, East, South, West, }

use Direction::*; assert_eq!(Direction::iter().collect::>(), vec![North, East, South, West]); ```

[TryFromRepr] and [ReprFrom]

Conversion to and from the discriminant of a C-like enum.

```rust use std::convert::TryInto;

[derive(Debug, Clone, Copy, PartialEq, Eq, enumutils::ReprFrom, enumutils::TryFromRepr)]

[repr(u8)]

pub enum Direction { North = 1, East, South, West }

use Direction::*; asserteq!(1u8, North.into()); asserteq!(4u8, West.into()); asserteq!(North, 1u8.tryinto().unwrap()); asserteq!(West, 4u8.tryinto().unwrap()); ```