#enum #iterator #enumerate #cardinality #variants

enum-iterator

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

20 releases (9 stable)

1.4.1 May 4, 2023
1.4.0 Feb 28, 2023
1.2.0 Aug 20, 2022
1.1.3 Jul 4, 2022
0.2.0 Jul 2, 2018

#25 in Rust patterns

Download history 177186/week @ 2023-08-15 180667/week @ 2023-08-22 157311/week @ 2023-08-29 163259/week @ 2023-09-05 154168/week @ 2023-09-12 160322/week @ 2023-09-19 155412/week @ 2023-09-26 157600/week @ 2023-10-03 185650/week @ 2023-10-10 180462/week @ 2023-10-17 163713/week @ 2023-10-24 172653/week @ 2023-10-31 176243/week @ 2023-11-07 214747/week @ 2023-11-14 144000/week @ 2023-11-21 150327/week @ 2023-11-28

717,351 downloads per month
Used in 987 crates (122 directly)

0BSD license

31KB
532 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

~330–750KB
~18K SLoC