#[derive(FieldlessEnumConstType)]
{
// Attributes available to this derive:
#[const_type]
}
Available on crate feature
derive only.Expand description
Derives the const type for a fieldless enum as well as the implementations
of the Const and OptionallyConst traits for the parameterizations
of the const type that represent the enum variants.
The fieldless enum also must derive the [Clone] and [Copy] traits.
ยงExample
use optionally_const::OptionallyConst;
use optionally_const_macros::FieldlessEnumConstType;
// Clone, Copy, and PartialEq derives on the enum are required for the derive macro to work.
#[derive(FieldlessEnumConstType, Debug, Clone, Copy, PartialEq)]
#[const_type(
// Clone, Copy, and PartialEq derives on the const type are required for the derive macro to work too
#[derive(Clone, Copy, PartialEq)]
ConstTypeName
)]
enum FieldlessEnum {
A,
B,
C,
}
fn print_fieldless_enum<T>(value: T)
where
T: OptionallyConst<FieldlessEnum>,
{
if let Some(value) = T::MAYBE_CONST {
println!("Const value: {:?}", value);
} else {
let value: FieldlessEnum = T::into_value(value);
println!("Non-const value: {:?}", value);
}
}
fn main() {
print_fieldless_enum(FieldlessEnum::A);
print_fieldless_enum(FieldlessEnum::B);
print_fieldless_enum(FieldlessEnum::C);
print_fieldless_enum(ConstTypeName::<{ FieldlessEnum::A as usize }>);
print_fieldless_enum(ConstTypeName::<{ FieldlessEnum::B as usize }>);
print_fieldless_enum(ConstTypeName::<{ FieldlessEnum::C as usize }>);
}