#utils #derive #enum

macro enum-utils

A set of useful proc macros for enums

3 releases

0.1.2 Oct 14, 2019
0.1.1 Jun 24, 2019
0.1.0 May 7, 2019

#1142 in Development tools

Download history 2979/week @ 2023-06-06 2817/week @ 2023-06-13 4854/week @ 2023-06-20 4155/week @ 2023-06-27 3333/week @ 2023-07-04 3807/week @ 2023-07-11 3912/week @ 2023-07-18 4190/week @ 2023-07-25 3475/week @ 2023-08-01 4265/week @ 2023-08-08 3997/week @ 2023-08-15 4602/week @ 2023-08-22 3856/week @ 2023-08-29 5038/week @ 2023-09-05 4728/week @ 2023-09-12 3990/week @ 2023-09-19

18,282 downloads per month
Used in 15 crates (11 directly)

MIT license

48KB
900 lines

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.

#[derive(Debug, PartialEq, enum_utils::FromStr)]
enum Test {
    Alpha,
    Beta,
}

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

IterVariants

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

#[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<_>>(), vec![North, East, South, West]);

TryFromRepr and ReprFrom

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

use std::convert::TryInto;

#[derive(Debug, Clone, Copy, PartialEq, Eq, enum_utils::ReprFrom, enum_utils::TryFromRepr)]
#[repr(u8)]
pub enum Direction {
    North = 1,
    East,
    South,
    West
}

use Direction::*;
assert_eq!(1u8, North.into());
assert_eq!(4u8, West.into());
assert_eq!(North, 1u8.try_into().unwrap());
assert_eq!(West,  4u8.try_into().unwrap());

Dependencies

~1.3–2.3MB
~52K SLoC