use facet_core::{OptionDef, OptionVTable};
#[derive(Clone, Copy)]
pub struct PeekOption<'mem, 'facet> {
pub(crate) value: crate::Peek<'mem, 'facet>,
pub(crate) def: OptionDef,
}
impl<'mem, 'facet> PeekOption<'mem, 'facet> {
#[inline(always)]
pub const fn def(self) -> OptionDef {
self.def
}
#[inline(always)]
pub const fn vtable(self) -> &'static OptionVTable {
self.def.vtable
}
#[inline]
pub fn is_some(self) -> bool {
unsafe { (self.vtable().is_some)(self.value.data()) }
}
#[inline]
pub fn is_none(self) -> bool {
!self.is_some()
}
#[inline]
pub fn value(self) -> Option<crate::Peek<'mem, 'facet>> {
unsafe {
(self.vtable().get_value)(self.value.data())
.map(|inner_data| crate::Peek::unchecked_new(inner_data, self.def.t()))
}
}
}