4 releases
0.1.4 | Mar 9, 2023 |
---|---|
0.1.3 | Sep 6, 2022 |
0.1.2 | Aug 30, 2022 |
0.1.1 | Aug 31, 2021 |
#56 in Algorithms
483,365 downloads per month
Used in 260 crates
(21 directly)
12KB
141 lines
task-local-extensions
Provides a type-safe task-local container for arbitrary data keyed by types.
How to install
Add task-local-extensions
to your dependencies
[dependencies]
# ...
task-local-extensions = "0.1.0"
Usage
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");
License
Licensed under either of Apache License, Version 2.0 or MIT license at your option.Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.
Dependencies
~6KB