#rwlock #tokio #async #mutex

async-debug

调试包含需要异步调用以渲染的值的结构体和枚举

4 个版本

0.1.3 2022 年 2 月 22 日
0.1.2 2022 年 2 月 22 日
0.1.1 2022 年 2 月 22 日
0.1.0 2022 年 2 月 22 日

#784 in 调试

MIT 许可证

9KB
86 代码行

Crates.io Crates.io docs.rs pre-commit

Async Debug

async-debug 代码库使得调试包含需要异步调用以渲染的值的结构体和枚举变得容易。

例如

use tokio::sync::RwLock;

#[derive(Debug)]
struct MyStruct {
    my_value: RwLock<String>
}

let my_struct = MyStruct { my_value: RwLock::from("Hello, world!".to_string()) };
println!("{:?}", my_struct );

打印类似的内容

MyStruct { my_value: RwLock { mr: 536870911, s: Semaphore { permits: 536870911 }, c: UnsafeCell { .. } } }

Async Debug 就是这样出现的

只需从 async_debug::AsyncDebug 派生,并添加适当的属性!

添加到 cargo.toml

[dependencies]
async-debug = "0.1.3"
use async_debug::AsyncDebug;
use tokio::sync::RwLock;

#[derive(AsyncDebug)]
struct MyStruct {
    #[async_debug(async_call = RwLock::read, clone, ty = String)]
    my_value: RwLock<String>
}

let my_struct = MyStruct { my_value: RwLock::from("Hello, world!".to_string()) };
assert_eq!(
    format!("{:?}", my_struct.async_debug().await),
    "MyStruct { my_value: \"Hello, world!\" }",
);

依赖项

~3.5MB
~63K SLoC