#rwlock #tokio #async #mutex

async-debug

Debug structs and enums containing values that require an async call to render

4 releases

0.1.3 Feb 22, 2022
0.1.2 Feb 22, 2022
0.1.1 Feb 22, 2022
0.1.0 Feb 22, 2022

#849 in Debugging

MIT license

9KB
86 lines

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

Async Debug

The async-debug crate makes it easy to debug structs and enums containing values that require an async call to render.

For example:

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

Prints something like:

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

Along comes Async Debug

Just derive from async_debug::AsyncDebug and add the appropriate attribute!

Add to 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!\" }",
);

Dependencies

~3MB
~60K SLoC