#extension #typemap #data #container #values #insert #task-local

task-local-extensions

任意数据的关键任务本地容器

4个版本

0.1.4 2023年3月9日
0.1.3 2022年9月6日
0.1.2 2022年8月30日
0.1.1 2021年8月31日

60算法 中排名

Download history 140478/week @ 2024-03-14 125273/week @ 2024-03-21 150659/week @ 2024-03-28 133507/week @ 2024-04-04 136973/week @ 2024-04-11 145487/week @ 2024-04-18 134786/week @ 2024-04-25 132697/week @ 2024-05-02 146583/week @ 2024-05-09 148281/week @ 2024-05-16 134935/week @ 2024-05-23 136138/week @ 2024-05-30 137037/week @ 2024-06-06 140205/week @ 2024-06-13 144112/week @ 2024-06-20 123709/week @ 2024-06-27

每月下载量 570,741次
200 个crate中(22个直接) 使用

MIT/Apache

12KB
141 代码行

task-local-extensions

提供基于类型的任务本地容器,用于存储任意数据。

Crates.io Docs.rs CI Coverage Status

如何安装

task-local-extensions 添加到依赖中

[dependencies]
# ...
task-local-extensions = "0.1.0"

使用方法

Extensions 是一个容器,可以存储每种类型的一个值,因此可以通过类型插入和检索值

use task_local_extensions::Extensions;

let a: i64 = 3;
let mut ext = Extensions::new();
ext.insert(a);
assert_eq!(ext.get::<i64>(), Some(&3));

该crate还提供了 with_extensions,以便在执行给定任务时设置 Extensions 实例

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");

许可证

许可协议为 Apache License, Version 2.0 或 MIT 许可证,您可任选其一。
除非您明确声明,否则任何有意提交以包含在作品中的贡献,根据 Apache-2.0 许可证定义,都应按上述方式双许可,不附加任何额外条款或条件。

依赖关系

~6KB