Struct once_cell::sync::OnceCell[][src]

pub struct OnceCell<T> { /* fields omitted */ }
[]

A thread-safe cell which can be written to only once.

Unlike ::std::sync::Mutex, a OnceCell provides simple & references to the contents.

Example

use once_cell::sync::OnceCell;

static CELL: OnceCell<String> = OnceCell::INIT;
assert!(CELL.get().is_none());

::std::thread::spawn(|| {
    let value: &String = CELL.get_or_init(|| {
        "Hello, World!".to_string()
    });
    assert_eq!(value, "Hello, World!");
}).join().unwrap();

let value: Option<&String> = CELL.get();
assert!(value.is_some());
assert_eq!(value.unwrap().as_str(), "Hello, World!");

Methods

impl<T> OnceCell<T>
[src]
[]

INIT: OnceCell<T> = OnceCell{once: ONCE_INIT, value: <UnsafeCell>::new(None),}

An empty cell, for initialization in a const context.

[]

Creates a new empty cell.

[]

Gets the reference to the underlying value. Returns None if the cell is empty.

[]

Sets the contents of this cell to value. Returns Ok(()) if the cell was empty and Err(value) if it was full.

Example

use once_cell::sync::OnceCell;

static CELL: OnceCell<i32> = OnceCell::INIT;

fn main() {
    assert!(CELL.get().is_none());

    ::std::thread::spawn(|| {
        assert_eq!(CELL.set(92), Ok(()));
    }).join().unwrap();

    assert_eq!(CELL.set(62), Err(62));
    assert_eq!(CELL.get(), Some(&92));
}

[]

Gets the contents of the cell, initializing it with f if the cell was empty. May threads may call get_or_init concurrently with different initializing functions, but it is guaranteed that only one function will be executed.

Example

use once_cell::sync::OnceCell;

let cell = OnceCell::new();
let value = cell.get_or_init(|| 92);
assert_eq!(value, &92);
let value = cell.get_or_init(|| unreachable!());
assert_eq!(value, &92);

Trait Implementations

impl<T: Debug> Debug for OnceCell<T>
[src]
[+]

[]

Formats the value using the given formatter. Read more

impl<T> Default for OnceCell<T>
[src]
[+]

[]

Returns the "default value" for a type. Read more

impl<T: Sync + Send> Sync for OnceCell<T>
[src]

impl<T: Send> Send for OnceCell<T>
[src]