use facet_core::{ResultDef, ResultVTable};
#[derive(Clone, Copy)]
pub struct PeekResult<'mem, 'facet> {
pub(crate) value: crate::Peek<'mem, 'facet>,
pub(crate) def: ResultDef,
}
impl<'mem, 'facet> PeekResult<'mem, 'facet> {
#[inline(always)]
pub const fn def(self) -> ResultDef {
self.def
}
#[inline(always)]
pub const fn vtable(self) -> &'static ResultVTable {
self.def.vtable
}
#[inline]
pub fn is_ok(self) -> bool {
unsafe { (self.vtable().is_ok)(self.value.data()) }
}
#[inline]
pub fn is_err(self) -> bool {
!self.is_ok()
}
#[inline]
pub fn ok(self) -> Option<crate::Peek<'mem, 'facet>> {
unsafe {
(self.vtable().get_ok)(self.value.data())
.map(|inner_data| crate::Peek::unchecked_new(inner_data, self.def.t()))
}
}
#[inline]
pub fn err(self) -> Option<crate::Peek<'mem, 'facet>> {
unsafe {
(self.vtable().get_err)(self.value.data())
.map(|inner_data| crate::Peek::unchecked_new(inner_data, self.def.e()))
}
}
}