Struct OnceLock

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

A synchronization primitive which can be used to run initialization code once. This type is thread safe and can be used in statics. All functions that can block are async.

Implementations§

Source§

impl<T> OnceLock<T>

Source

pub const fn new() -> Self

Creates a new uninitialized OnceLock.

Source

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

Get a reference to the data in the OnceLock if it has been initialized.

Source

pub fn get_mut(&mut self) -> Option<&mut T>

Get a mutable reference to the data in the OnceLock if it has been initialized.

Source

pub fn set(&self, data: T) -> Result<(), T>

Attempt to set the data in the OnceLock if it has not been initialized.

§Errors

If the data in this OnceLock is already initialized, the data parameter is returned as an error.

Source

pub fn into_inner(self) -> Option<T>

Consumes the OnceLock and returns the inner data if it has been initialized.

Source

pub fn take(&mut self) -> Option<T>

Move the data out of the OnceLock if it has been initialized. This will leave the OnceLock in an uninitialized state.

Source

pub fn try_insert(&self, data: T) -> Result<&T, (&T, T)>

Attempt to set the data in the OnceLock if it has not been initialized. This is similar to OnceLock::set but always returns the data in the OnceLock.

§Errors

If the data in this OnceLock is already initialized, the function returns a reference to the previously stored data along with the value given as the data parameter.

Source

pub async fn get_or_init(&self, init: impl FnOnce() -> T) -> &T

Get or initialize the data in the OnceLock. This function will always return the value stored.

Source

pub async fn get_or_try_init<E: Error>( &self, init: impl FnOnce() -> Result<T, E>, ) -> Result<&T, E>

Get or try to initialize the data in the OnceLock.

If the data in the OnceLock is uninitialized, the init function is run and a reference to the newly created data is returned. Otherwise, a reference to the previously stored data is returned.

§Errors

If init is called and returns an error, the error is propagated and no value is set.

Trait Implementations§

Source§

impl<T: Clone> Clone for OnceLock<T>

Source§

fn clone(&self) -> Self

Returns a duplicate of the value. Read more
1.0.0 · Source§

const fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl<T: Debug> Debug for OnceLock<T>

Source§

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

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

impl<T> Default for OnceLock<T>

Source§

fn default() -> Self

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

impl<T> Drop for OnceLock<T>

Source§

fn drop(&mut self)

Executes the destructor for this type. Read more
Source§

impl<T> From<T> for OnceLock<T>

Source§

fn from(data: T) -> Self

Converts to this type from the input type.
Source§

impl<T: PartialEq> PartialEq for OnceLock<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§

const 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 OnceLock<T>

Source§

impl<T: Send> Send for OnceLock<T>

Source§

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

Auto Trait Implementations§

§

impl<T> !Freeze for OnceLock<T>

§

impl<T> !RefUnwindSafe for OnceLock<T>

§

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

§

impl<T> UnwindSafe for OnceLock<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> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<!> for T

Source§

fn from(t: !) -> T

Converts to this type from the input type.
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> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
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.