exhaust/impls/
core_cell.rs

1use core::cell;
2
3use crate::patterns::{delegate_factory_and_iter, impl_newtype_generic};
4use crate::Exhaust;
5
6impl_newtype_generic!(T: [], cell::Cell<T>, cell::Cell::new);
7impl_newtype_generic!(T: [], cell::RefCell<T>, cell::RefCell::new);
8impl_newtype_generic!(T: [], cell::UnsafeCell<T>, cell::UnsafeCell::new);
9
10impl<T: Exhaust> Exhaust for cell::OnceCell<T> {
11    delegate_factory_and_iter!(Option<T>);
12
13    fn from_factory(factory: Self::Factory) -> Self {
14        let cell = cell::OnceCell::new();
15        if let Some(value) = Option::<T>::from_factory(factory) {
16            match cell.set(value) {
17                Ok(()) => {}
18                Err(_) => unreachable!(),
19            }
20        }
21        cell
22    }
23}