use crate::internal_prelude::*;
#[derive(Clone, Debug, Eq, PartialEq)]
pub(crate) enum IfEnabled<T> {
Enabled(T, EnabledToken),
Noop,
}
use IfEnabled::*;
impl<T> IfEnabled<T> {
pub(crate) fn into_enabled(self) -> Option<T> {
match self {
Enabled(y, _e) => Some(y),
Noop => None,
}
}
pub(crate) fn as_ref(&self) -> IfEnabled<&T> {
match self {
Enabled(y, e) => Enabled(y, *e),
Noop => Noop,
}
}
pub(crate) fn as_enabled(&self) -> Option<&T> {
self.as_ref().into_enabled()
}
#[track_caller]
pub(crate) fn enabled_or_bug(self) -> Result<T, Bug> {
match self {
Enabled(y, _e) => Ok(y),
Noop => Err(internal!("IfEnabled unexpectedly Noop")),
}
}
}