Struct OnceCell
struct OnceCell<T> { ... }
A cell which can be written to only once. It is not thread safe.
Unlike std::cell::RefCell, a OnceCell provides simple &
references to the contents.
Example
use OnceCell;
let cell = new;
assert!;
let value: &String = cell.get_or_init;
assert_eq!;
assert!;
Implementations
impl<T> OnceCell<T>
const fn new() -> OnceCell<T>Creates a new empty cell.
const fn with_value(value: T) -> OnceCell<T>Creates a new initialized cell.
fn get(self: &Self) -> Option<&T>Gets a reference to the underlying value.
Returns
Noneif the cell is empty.fn get_mut(self: &mut Self) -> Option<&mut T>Gets a mutable reference to the underlying value.
Returns
Noneif the cell is empty.This method is allowed to violate the invariant of writing to a
OnceCellat most once because it requires&mutaccess toself. As with all interior mutability,&mutaccess permits arbitrary modification:use OnceCell; let mut cell: = new; cell.set.unwrap; *cell.get_mut.unwrap = 93; assert_eq!;fn set(self: &Self, value: T) -> Result<(), T>Sets the contents of this cell to
value.Returns
Ok(())if the cell was empty andErr(value)if it was full.Example
use OnceCell; let cell = new; assert!; assert_eq!; assert_eq!; assert!;fn try_insert(self: &Self, value: T) -> Result<&T, (&T, T)>Like
set, but also returns a reference to the final cell value.Example
use OnceCell; let cell = new; assert!; assert_eq!; assert_eq!; assert!;fn get_or_init<F>(self: &Self, f: F) -> &T where F: FnOnce() -> TGets the contents of the cell, initializing it with
fif the cell was empty.Panics
If
fpanics, the panic is propagated to the caller, and the cell remains uninitialized.It is an error to reentrantly initialize the cell from
f. Doing so results in a panic.Example
use OnceCell; let cell = new; let value = cell.get_or_init; assert_eq!; let value = cell.get_or_init; assert_eq!;fn get_or_try_init<F, E>(self: &Self, f: F) -> Result<&T, E> where F: FnOnce() -> Result<T, E>Gets the contents of the cell, initializing it with
fif the cell was empty. If the cell was empty andffailed, an error is returned.Panics
If
fpanics, the panic is propagated to the caller, and the cell remains uninitialized.It is an error to reentrantly initialize the cell from
f. Doing so results in a panic.Example
use OnceCell; let cell = new; assert_eq!; assert!; let value = cell.get_or_try_init; assert_eq!; assert_eq!fn take(self: &mut Self) -> Option<T>Takes the value out of this
OnceCell, moving it back to an uninitialized state.Has no effect and returns
Noneif theOnceCellhasn't been initialized.Examples
use OnceCell; let mut cell: = new; assert_eq!; let mut cell = new; cell.set.unwrap; assert_eq!; assert_eq!;This method is allowed to violate the invariant of writing to a
OnceCellat most once because it requires&mutaccess toself. As with all interior mutability,&mutaccess permits arbitrary modification:use OnceCell; let mut cell: = new; cell.set.unwrap; cell = new;fn into_inner(self: Self) -> Option<T>Consumes the
OnceCell, returning the wrapped value.Returns
Noneif the cell was empty.Examples
use OnceCell; let cell: = new; assert_eq!; let cell = new; cell.set.unwrap; assert_eq!;
impl<T> Any for OnceCell<T>
fn type_id(self: &Self) -> TypeId
impl<T> Borrow for OnceCell<T>
fn borrow(self: &Self) -> &T
impl<T> BorrowMut for OnceCell<T>
fn borrow_mut(self: &mut Self) -> &mut T
impl<T> CloneToUninit for OnceCell<T>
unsafe fn clone_to_uninit(self: &Self, dest: *mut u8)
impl<T> Default for OnceCell<T>
fn default() -> Self
impl<T> Freeze for OnceCell<T>
impl<T> From for OnceCell<T>
fn from(t: never) -> T
impl<T> From for OnceCell<T>
fn from(t: T) -> TReturns the argument unchanged.
impl<T> From for OnceCell<T>
fn from(value: T) -> Self
impl<T> Send for OnceCell<T>
impl<T> Sync for OnceCell<T>
impl<T> ToOwned for OnceCell<T>
fn to_owned(self: &Self) -> Tfn clone_into(self: &Self, target: &mut T)
impl<T> Unpin for OnceCell<T>
impl<T> UnsafeUnpin for OnceCell<T>
impl<T, U> Into for OnceCell<T>
fn into(self: Self) -> UCalls
U::from(self).That is, this conversion is whatever the implementation of
[From]<T> for Uchooses to do.
impl<T, U> TryFrom for OnceCell<T>
fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>
impl<T, U> TryInto for OnceCell<T>
fn try_into(self: Self) -> Result<U, <U as TryFrom<T>>::Error>
impl<T: Clone> Clone for OnceCell<T>
fn clone(self: &Self) -> OnceCell<T>fn clone_from(self: &mut Self, source: &Self)
impl<T: Eq> Eq for OnceCell<T>
impl<T: PartialEq> PartialEq for OnceCell<T>
fn eq(self: &Self, other: &Self) -> bool
impl<T: RefUnwindSafe + UnwindSafe> RefUnwindSafe for OnceCell<T>
impl<T: UnwindSafe> UnwindSafe for OnceCell<T>
impl<T: fmt::Debug> Debug for OnceCell<T>
fn fmt(self: &Self, f: &mut Formatter<'_>) -> Result