Crates.io | task-local-extensions |
lib.rs | task-local-extensions |
version | 0.1.4 |
source | src |
created_at | 2021-08-31 10:46:13.263848 |
updated_at | 2023-03-09 10:29:51.516244 |
description | Task-local container for arbitrary data. |
homepage | |
repository | https://github.com/TrueLayer/task-local-extensions |
max_upload_size | |
id | 445046 |
size | 30,133 |
Provides a type-safe task-local container for arbitrary data keyed by types.
Add task-local-extensions
to your dependencies
[dependencies]
# ...
task-local-extensions = "0.1.0"
Extensions
is a container that can store up to one value of each type, so you can insert and retrive values by
their type:
use task_local_extensions::Extensions;
let a: i64 = 3;
let mut ext = Extensions::new();
ext.insert(a);
assert_eq!(ext.get::<i64>(), Some(&3));
The crate also provides with_extensions
so you set an Extensions
instance while running a given task:
use task_local_extensions::{get_local_item, set_local_item, with_extensions, Extensions};
async fn my_task() {
let a: i64 = get_local_item().await.unwrap(0);
let msg = format!("The value of a is: {}", a);
set_local_item(msg).await;
}
let a: i64 = 3;
let (out_ext, _) = with_extensions(Extensions::new().with(a), my_task()).await;
let msg = out_ext.get::<String>().unwrap();
assert_eq!(msg.as_str(), "The value of a is: 3");