enum-unitary

Crates.ioenum-unitary
lib.rsenum-unitary
version0.5.0
sourcesrc
created_at2018-04-28 10:54:00.096172
updated_at2022-07-09 21:01:10.172564
descriptionTrait and macro for unitary enums
homepage
repositoryhttps://github.com/spearman/enum-unitary
max_upload_size
id62736
size28,831
Shane Pearman (spearman)

documentation

README

enum-unitary

Trait and macro for unitary enums

Documentation

The EnumUnitary trait carries a number of constraints for primitive conversions iterating over variants of a unitary enum (i.e. enum variants do not have payloads).

The enum_unitary! macro defines a new enum implementing EnumUnitary and required traits.

Usage

For the macro to derive Sequence, the enum-iterator crate must also be added to Cargo.toml:

enum-iterator = "1.0"
enum-unitary = "0.5"

Define a unitary enum:

use enum_unitary::{enum_unitary, EnumUnitary, FromPrimitive, ToPrimitive};

enum_unitary! {
  #[derive(Debug, PartialEq)]
  pub enum E {
    A, B, C
  }
}

assert_eq!(enum_iterator::cardinality::<E>(), 3);
assert_eq!(Into::<usize>::into (E::A), 0);
assert_eq!(Into::<usize>::into (E::B), 1);
assert_eq!(Into::<usize>::into (E::C), 2);
assert_eq!(enum_iterator::first::<E>().unwrap(), E::A);
assert_eq!(enum_iterator::last::<E>().unwrap(),  E::C);
let mut i = enum_iterator::all::<E>();
assert_eq!(i.next(), Some (E::A));
assert_eq!(i.next(), Some (E::B));
assert_eq!(i.next(), Some (E::C));
assert_eq!(i.next(), None);
assert_eq!(enum_iterator::next (&E::A), Some (E::B));
assert_eq!(enum_iterator::previous (&E::A), None);
assert_eq!(enum_iterator::next (&E::B), Some (E::C));
assert_eq!(enum_iterator::previous (&E::B), Some (E::A));
assert_eq!(enum_iterator::next (&E::C), None);
assert_eq!(enum_iterator::previous (&E::C), Some (E::B));
Commit count: 40

cargo fmt