4 releases

0.1.2 Dec 4, 2024
0.1.1 Dec 23, 2023
0.1.0 Dec 23, 2023
0.1.0-preview1 Dec 18, 2023

#331 in Asynchronous

Download history 12/week @ 2024-09-23 125/week @ 2024-12-02 14/week @ 2024-12-09

139 downloads per month

MIT/Apache

18KB
290 lines

Future Local Storage

tests crates.io Documentation MIT/Apache-2 licensed

An init-once-per-future cell for thread-local values.

This crate provides an FutureOnceCell cell-like type, which provides the similar API as the tokio::task_local but without using any macros.

Future local storage associates a value to the context of a given future. After the future finished it returns this value back to the caller. That meaning that the values is passed through the context of the executed future. This functionality can be useful for tracing async code or adding metrics to it.

Usage

use std::cell::Cell;

use future_local_storage::FutureOnceCell;

static VALUE: FutureOnceCell<Cell<u64>> = FutureOnceCell::new();

#[tokio::main]
async fn main() {
    let (output, answer) = VALUE.scope(Cell::from(0), async {
        VALUE.with(|x| {
            let value = x.get();
            x.set(value + 1);
        });

        "42".to_owned()
    }).await;

    assert_eq!(output.into_inner(), 1);
    assert_eq!(answer, "42");
}

Dependencies

~1–28MB
~359K SLoC