Skip to content

Rust library for single assignment cells and lazy statics without macros

License

Apache-2.0, MIT licenses found

Licenses found

Apache-2.0
LICENSE-APACHE
MIT
LICENSE-MIT
Notifications You must be signed in to change notification settings

matklad/once_cell

Folders and files

NameName
Last commit message
Last commit date

Latest commit

a70d907 · Mar 13, 2025
Nov 25, 2022
Aug 8, 2018
Jun 4, 2023
Mar 13, 2025
Mar 10, 2025
Mar 10, 2025
Aug 17, 2020
Mar 13, 2025
Mar 13, 2025
Mar 13, 2025
Aug 2, 2018
Aug 2, 2018
Jun 4, 2023
Nov 11, 2020
Aug 8, 2018
Sep 1, 2019

Repository files navigation

once_cell

Build Status Crates.io API reference

Overview

once_cell provides two new cell-like types, unsync::OnceCell and sync::OnceCell. OnceCell might store arbitrary non-Copy types, can be assigned to at most once and provide direct access to the stored contents. In a nutshell, API looks roughly like this:

impl OnceCell<T> {
    fn new() -> OnceCell<T> { ... }
    fn set(&self, value: T) -> Result<(), T> { ... }
    fn get(&self) -> Option<&T> { ... }
}

Note that, like with RefCell and Mutex, the set method requires only a shared reference. Because of the single assignment restriction get can return an &T instead of Ref<T> or MutexGuard<T>.

once_cell also has a Lazy<T> type, build on top of OnceCell which provides the same API as the lazy_static! macro, but without using any macros:

use std::{sync::Mutex, collections::HashMap};
use once_cell::sync::Lazy;

static GLOBAL_DATA: Lazy<Mutex<HashMap<i32, String>>> = Lazy::new(|| {
    let mut m = HashMap::new();
    m.insert(13, "Spica".to_string());
    m.insert(74, "Hoyten".to_string());
    Mutex::new(m)
});

fn main() {
    println!("{:?}", GLOBAL_DATA.lock().unwrap());
}

More patterns and use-cases are in the docs!

Related crates

Parts of once_cell API are included into std as of Rust 1.70.0.

About

Rust library for single assignment cells and lazy statics without macros

Topics

Resources

License

Apache-2.0, MIT licenses found

Licenses found

Apache-2.0
LICENSE-APACHE
MIT
LICENSE-MIT

Stars

Watchers

Forks

Packages

No packages published

Languages