1 个不稳定版本
0.0.9 | 2024年4月23日 |
---|
#1303 在 Rust 模式
每月下载量 443
16KB
143 行
tyco
- 用于创建作用域化的 TYped COntexts 的 crate。
此 crate 允许您在当前执行上下文中(同步或异步)定义和存储类型信息,并通过调用堆栈传递而无需在函数参数中显式指定。这对于在不干扰主要业务逻辑代码的情况下实现一些附加功能非常有用。
它受到了 opentelemetry::Context
的启发,类似于日志记录器存储 id log/slog/tracing,使用 TLS 存储和访问值。与 opentelemetry::Context
不同,它基本上是 HashMap<TypeId, Any>
,当前的 crate 允许处理任何类型,这可能会(或可能不会)导致更高效和干净的代码。
示例
如何定义包含某些跟踪标识符的上下文的基本示例,这些标识符可用于区分 HTTP 请求等。
use tyco::{context, FutureExt, TypedContext};
mod trace_id {
use super::*;
#[derive(Clone, Default, Debug, PartialEq)]
pub struct TraceId(String);
tyco::context!(TraceId);
}
let t = trace_id::TraceId::default();
let spawned_fut = tokio::spawn(
async { println!("{:?}", trace_id::TraceId::current()) }
// 2 ways to pass context to spawned future
.with_current::<trace_id::TraceId>()
.with(t.clone()),
);
还可以查看更多复杂的 示例(例如,如何与 HTTP 服务器/客户端一起使用)。
依赖关系
~285–750KB
~17K SLoC