5 releases (1 stable)
1.0.0 | Jun 26, 2024 |
---|---|
0.3.0 | Jun 5, 2024 |
0.2.0 | Apr 27, 2024 |
0.1.0 | Apr 8, 2024 |
#520 in Rust patterns
36 downloads per month
36KB
602 lines
enumerable
Enumerate all possible values of a type.
See the examples for more examples and a guide on how to use the crate.
See the documentation for detailed information on the crate.
TL;DR
use enumerable::Enumerable;
#[derive(Debug, Copy, Clone, Enumerable)]
#[allow(dead_code)]
enum Food {
Apple,
Banana,
Coffee { with_milk: bool },
}
#[derive(Debug, Copy, Clone, Enumerable)]
#[allow(dead_code)]
struct Meal {
alice_eats: Food,
bob_eats: Option<Food>,
at_home: bool,
}
fn main() {
println!("There are {} different meals, enumerated as follows:", Meal::ENUMERABLE_SIZE);
for meal in Meal::enumerator() {
println!("{:?}", meal);
}
}
The code above will output:
There are 40 different meals, enumerated as follows:
Meal { alice_eats: Apple, bob_eats: None, at_home: false }
Meal { alice_eats: Apple, bob_eats: None, at_home: true }
Meal { alice_eats: Apple, bob_eats: Some(Apple), at_home: false }
Meal { alice_eats: Apple, bob_eats: Some(Apple), at_home: true }
Meal { alice_eats: Apple, bob_eats: Some(Banana), at_home: false }
Meal { alice_eats: Apple, bob_eats: Some(Banana), at_home: true }
Meal { alice_eats: Apple, bob_eats: Some(Coffee { with_milk: false }), at_home: false }
Meal { alice_eats: Apple, bob_eats: Some(Coffee { with_milk: false }), at_home: true }
Meal { alice_eats: Apple, bob_eats: Some(Coffee { with_milk: true }), at_home: false }
Meal { alice_eats: Apple, bob_eats: Some(Coffee { with_milk: true }), at_home: true }
Meal { alice_eats: Banana, bob_eats: None, at_home: false }
...
Dependencies
~1.3–2MB
~40K SLoC