1#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
5#[repr(C)]
6pub enum Optional<T> {
7 Some(T),
9
10 None,
12}
13
14impl<T> Optional<T> {
15 pub fn into_option(self) -> Option<T> {
16 self.into()
17 }
18
19 pub const fn as_ref(&self) -> Option<&T> {
20 match self {
21 Self::Some(x) => Option::Some(x),
22 Self::None => Option::None,
23 }
24 }
25
26 pub fn as_mut(&mut self) -> Option<&mut T> {
31 match self {
32 Self::Some(x) => Option::Some(x),
33 Self::None => Option::None,
34 }
35 }
36}
37
38impl<T> From<Option<T>> for Optional<T> {
39 fn from(v: Option<T>) -> Optional<T> {
40 match v {
41 Some(v) => Optional::Some(v),
42 None => Optional::None,
43 }
44 }
45}
46
47impl<T> From<Optional<T>> for Option<T> {
48 fn from(value: Optional<T>) -> Self {
49 match value {
50 Optional::Some(value) => Option::Some(value),
51 Optional::None => Option::None,
52 }
53 }
54}