#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
#[repr(C)]
pub enum Optional<T> {
Some(T),
None,
}
impl<T> Optional<T> {
pub fn into_option(self) -> Option<T> {
self.into()
}
pub const fn as_ref(&self) -> Option<&T> {
match self {
Self::Some(x) => Option::Some(x),
Self::None => Option::None,
}
}
pub fn as_mut(&mut self) -> Option<&mut T> {
match self {
Self::Some(x) => Option::Some(x),
Self::None => Option::None,
}
}
}
impl<T> From<Option<T>> for Optional<T> {
fn from(v: Option<T>) -> Optional<T> {
match v {
Some(v) => Optional::Some(v),
None => Optional::None,
}
}
}
impl<T> From<Optional<T>> for Option<T> {
fn from(value: Optional<T>) -> Self {
match value {
Optional::Some(value) => Option::Some(value),
Optional::None => Option::None,
}
}
}