use crate::ConfigField;
pub trait EnumDiscriminant: ConfigField + Eq + Sized + Copy + Send + Sync + 'static {
const VARIANTS: &'static [Self];
fn into_usize(self) -> usize;
fn name(self) -> &'static str;
fn from_name(name: &str) -> Option<Self>;
}
#[derive(PartialEq)]
pub struct EnumDiscriminantWrapper<T>(pub T);
#[derive(Default, Clone)]
pub struct EnumDiscriminantMetadata<T> {
pub default: T,
}
#[derive(Clone)]
pub struct EnumFieldMetadata<Discrim: ConfigField> {
pub discrim: Discrim::Metadata,
}
impl<Discrim: ConfigField> Default for EnumFieldMetadata<Discrim>
where
Discrim::Metadata: Default,
{
fn default() -> Self { Self { discrim: Discrim::Metadata::default() } }
}