facet_reflect/peek/
option.rs1use facet_core::{OptionDef, OptionVTable};
2
3#[derive(Clone, Copy)]
5pub struct PeekOption<'mem, 'facet, 'shape> {
6 pub(crate) value: crate::Peek<'mem, 'facet, 'shape>,
8
9 pub(crate) def: OptionDef<'shape>,
11}
12
13impl<'mem, 'facet, 'shape> PeekOption<'mem, 'facet, 'shape> {
14 #[inline(always)]
16 pub fn def(self) -> OptionDef<'shape> {
17 self.def
18 }
19
20 #[inline(always)]
22 pub fn vtable(self) -> &'shape OptionVTable {
23 self.def.vtable
24 }
25
26 #[inline]
28 pub fn is_some(self) -> bool {
29 unsafe { (self.vtable().is_some_fn)(self.value.data()) }
30 }
31
32 #[inline]
34 pub fn is_none(self) -> bool {
35 !self.is_some()
36 }
37
38 pub fn value(self) -> Option<crate::Peek<'mem, 'facet, 'shape>> {
40 unsafe {
41 (self.vtable().get_value_fn)(self.value.data())
42 .map(|inner_data| crate::Peek::unchecked_new(inner_data, self.def.t()))
43 }
44 }
45}