Struct OnceCell

Source
pub struct OnceCell<T> { /* private fields */ }
Expand description

Cell which can be lazy instantiated with an asynchronous block and is safely share-able between threads.

Implementations§

Source§

impl<T> OnceCell<T>

Source

pub fn new() -> Self

Creates a new empty OnceCell. Currently this function is not const due to Mutex limitations, so to share between multiple threads an Arc needs to be used.

Source

pub async fn get_or_init<F>(&self, f: F) -> &T
where F: Future<Output = T>,

Get or initialize this cell with the given asynchronous block. If the cell is already initialized, the current value will be returned. Otherwise the asynchronous block is used to initialize the OnceCell. This function will always return a value.

§Example
let cell = OnceCell::new();
cell.get_or_init(async {
    0 // expensive calculation
}).await;
assert_eq!(cell.get(), Some(&0));
Source

pub async fn get_or_try_init<F, E>(&self, f: F) -> Result<&T, E>
where F: Future<Output = Result<T, E>>,

Get or initialize this cell with the given asynchronous block. If the cell is already initialized, the current value will be returned. Otherwise the asynchronous block is used to initialize the OnceCell. This function will always return a value.

§Example
let cell = OnceCell::new();
cell.get_or_try_init(async {
    Ok::<_, Infallible>(0) // expensive calculation
}).await;
assert_eq!(cell.get(), Some(&0));
Source

pub fn get(&self) -> Option<&T>

Returns the value of the OnceCell or None if the OnceCell has not been initialized yet.

Source

pub fn initialized(&self) -> bool

If the OnceCell is already initialized, either by having have called get_or_init() or get_or_try_init().

Trait Implementations§

Source§

impl<T: Debug> Debug for OnceCell<T>

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<T> Default for OnceCell<T>

Source§

fn default() -> Self

Returns the “default value” for a type. Read more
Source§

impl<T: PartialEq> PartialEq for OnceCell<T>

Source§

fn eq(&self, other: &Self) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl<T: Eq> Eq for OnceCell<T>

Source§

impl<T: Send> Send for OnceCell<T>

Source§

impl<T: Sync + Send> Sync for OnceCell<T>

Auto Trait Implementations§

§

impl<T> !Freeze for OnceCell<T>

§

impl<T> !RefUnwindSafe for OnceCell<T>

§

impl<T> Unpin for OnceCell<T>
where T: Unpin,

§

impl<T> UnwindSafe for OnceCell<T>
where T: UnwindSafe,

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.