future-local-storage

Crates.iofuture-local-storage
lib.rsfuture-local-storage
version0.1.1
sourcesrc
created_at2023-12-18 20:56:18.942994
updated_at2023-12-23 13:32:48.419538
descriptionAn init-once-per-future cell for thread-local values.
homepage
repositoryhttps://github.com/alekseysidorov/future-local-storage
max_upload_size
id1073695
size49,669
Aleksey Sidorov (alekseysidorov)

documentation

README

Overview

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");
}
Commit count: 48

cargo fmt