use enumerable::Enumerable;
#[derive(Copy, Clone, Enumerable, Debug)]
enum FieldA {
A,
B,
C,
}
#[derive(Copy, Clone, Enumerable, Debug)]
#[allow(dead_code)]
enum FieldB {
X,
Y(bool),
Z(bool, bool),
}
#[derive(Copy, Clone, Enumerable, Debug)]
#[allow(dead_code)]
struct Struct {
a: FieldA,
b: FieldB,
}
#[derive(Copy, Clone, Enumerable, Debug)]
#[allow(dead_code)]
struct TupleLikeStruct(FieldA, FieldB);
#[derive(Copy, Clone, Enumerable, Debug)]
struct UnitStruct;
#[derive(Copy, Clone, Enumerable, Debug)]
enum EmptyEnum {}
#[derive(Copy, Clone, Enumerable, Debug)]
#[allow(unused_variables)]
struct StructWithEmptyEnum {
a: bool,
b: bool,
empty: EmptyEnum,
}
pub fn main() {
println!(
"printing all possible values of Struct ({} in total):",
Struct::ENUMERABLE_SIZE
);
for value in Struct::enumerator() {
println!("{:?}", value);
}
println!();
println!(
"printing all possible values of TupleLikeStruct ({} in total):",
TupleLikeStruct::ENUMERABLE_SIZE
);
for value in TupleLikeStruct::enumerator() {
println!("{:?}", value);
}
println!();
println!(
"printing all possible values of UnitStruct ({} in total):",
UnitStruct::ENUMERABLE_SIZE
);
for value in UnitStruct::enumerator() {
println!("{:?}", value);
}
println!();
println!(
"number of possible values of structs with empty fields: {:?}\n",
StructWithEmptyEnum::ENUMERABLE_SIZE
);
}