pub trait EnumExtensions: Sized {
#[inline]
fn try_into_var<Var>(self) -> Result<Var, Self>
where Var: FromEnum<Self> {
Var::from_enum(self)
}
#[inline]
fn try_ref_var<Var>(&self) -> Option<&Var>
where Var: FromEnumRef<Self> {
Var::from_enum_ref(self)
}
#[inline]
fn try_mut_var<Var>(&mut self) -> Option<&mut Var>
where Var: FromEnumMut<Self> {
Var::from_enum_mut(self)
}
#[inline]
fn is_var<Var>(&self) -> bool
where Var: FromEnumRef<Self> {
self.try_ref_var::<Var>().is_some()
}
}
pub trait FromEnum<Enum>: Sized {
fn from_enum(e: Enum) -> Result<Self, Enum>;
}
pub trait FromEnumRef<Enum> {
fn from_enum_ref(e: &Enum) -> Option<&Self>;
}
pub trait FromEnumMut<Enum> {
fn from_enum_mut(e: &mut Enum) -> Option<&mut Self>;
}