#enums #iterator #variant #cardinality #enumerate #derive-debug

enum-iterator

Tools to iterate over all values of a type (e.g. all variants of an enumeration)

24 releases (13 stable)

new 2.1.0 May 1, 2024
2.0.0 Feb 25, 2024
1.5.0 Jan 15, 2024
1.4.1 May 4, 2023
0.2.0 Jul 2, 2018

#31 in Rust patterns

Download history 150323/week @ 2024-01-12 174520/week @ 2024-01-19 150932/week @ 2024-01-26 154755/week @ 2024-02-02 151228/week @ 2024-02-09 123933/week @ 2024-02-16 149564/week @ 2024-02-23 140015/week @ 2024-03-01 145155/week @ 2024-03-08 144299/week @ 2024-03-15 146665/week @ 2024-03-22 181984/week @ 2024-03-29 169438/week @ 2024-04-05 158334/week @ 2024-04-12 141621/week @ 2024-04-19 110848/week @ 2024-04-26

617,237 downloads per month
Used in 1,164 crates (140 directly)

0BSD license

34KB
628 lines

Overview

Tools to iterate over the values of a type.

Examples

use enum_iterator::{all, cardinality, first, last, next, previous, reverse_all, Sequence};

#[derive(Debug, PartialEq, Sequence)]
enum Day { Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday }

assert_eq!(cardinality::<Day>(), 7);
assert_eq!(all::<Day>().collect::<Vec<_>>(), [
    Day::Monday,
    Day::Tuesday,
    Day::Wednesday,
    Day::Thursday,
    Day::Friday,
    Day::Saturday,
    Day::Sunday,
]);
assert_eq!(first::<Day>(), Some(Day::Monday));
assert_eq!(last::<Day>(), Some(Day::Sunday));
assert_eq!(next(&Day::Tuesday), Some(Day::Wednesday));
assert_eq!(previous(&Day::Wednesday), Some(Day::Tuesday));
assert_eq!(reverse_all::<Day>().collect::<Vec<_>>(), [
    Day::Sunday,
    Day::Saturday,
    Day::Friday,
    Day::Thursday,
    Day::Wednesday,
    Day::Tuesday,
    Day::Monday,
]);
use enum_iterator::{cardinality, first, last, Sequence};

#[derive(Debug, PartialEq, Sequence)]
struct Foo {
    a: bool,
    b: u8,
}

assert_eq!(cardinality::<Foo>(), 512);
assert_eq!(first::<Foo>(), Some(Foo { a: false, b: 0 }));
assert_eq!(last::<Foo>(), Some(Foo { a: true, b: 255 }));

Rust version

This crate tracks stable Rust. Minor releases may require a newer Rust version. Patch releases must not require a newer Rust version.

Contribute

All contributions shall be licensed under the 0BSD license.

Dependencies

~320–770KB
~18K SLoC