#![allow(dead_code)]
#![allow(unused)]
use crate::__internal::Private;
use crate::{Mut, MutProxied, Proxied, View};
use std::convert::{AsMut, AsRef};
use std::fmt::{self, Debug};
use std::panic;
use std::ptr;
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum Optional<T> {
Set(T),
Unset(T),
}
impl<T> Optional<T> {
pub fn into_inner(self) -> T {
match self {
Optional::Set(x) | Optional::Unset(x) => x,
}
}
pub fn new(val: T, is_set: bool) -> Self {
if is_set {
Optional::Set(val)
} else {
Optional::Unset(val)
}
}
pub fn into_option(self) -> Option<T> {
if let Optional::Set(x) = self {
Some(x)
} else {
None
}
}
pub fn is_set(&self) -> bool {
matches!(self, Optional::Set(_))
}
pub fn is_unset(&self) -> bool {
matches!(self, Optional::Unset(_))
}
}
impl<T> From<Optional<T>> for Option<T> {
fn from(x: Optional<T>) -> Option<T> {
x.into_option()
}
}