#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)

22 releases (11 stable)

2.0.0 Feb 25, 2024
1.5.0 Jan 15, 2024
1.4.1 May 4, 2023
1.4.0 Feb 28, 2023
0.2.0 Jul 2, 2018

#33 in Rust patterns

Download history 174666/week @ 2023-11-26 157253/week @ 2023-12-03 144061/week @ 2023-12-10 149159/week @ 2023-12-17 69518/week @ 2023-12-24 125680/week @ 2023-12-31 140702/week @ 2024-01-07 162107/week @ 2024-01-14 162076/week @ 2024-01-21 156075/week @ 2024-01-28 154747/week @ 2024-02-04 142622/week @ 2024-02-11 125975/week @ 2024-02-18 151952/week @ 2024-02-25 139174/week @ 2024-03-03 60498/week @ 2024-03-10

487,090 downloads per month
Used in 1,118 crates (137 directly)

MIT 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 MIT license.

Dependencies

~295–740KB
~18K SLoC