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

23 releases (12 stable)

new 2.0.1 Apr 19, 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

#29 in Rust patterns

Download history 140627/week @ 2024-01-05 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 118147/week @ 2024-04-19

660,067 downloads per month
Used in 1,155 crates (139 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

~320–770KB
~18K SLoC