[![Crates.io](https://img.shields.io/crates/v/async-debug)](https://crates.io/crates/async-debug) [![Crates.io](https://img.shields.io/crates/l/async-debug)](https://crates.io/crates/async-debug) [![docs.rs](https://img.shields.io/docsrs/async-debug)](https://docs.rs/async-debug) [![pre-commit](https://img.shields.io/badge/pre--commit-enabled-brightgreen?logo=pre-commit&logoColor=white)](https://github.com/pre-commit/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: ```rust use tokio::sync::RwLock; #[derive(Debug)] struct MyStruct { my_value: RwLock } let my_struct = MyStruct { my_value: RwLock::from("Hello, world!".to_string()) }; println!("{:?}", my_struct ); ``` Prints something like: ```text 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: ```toml [dependencies] async-debug = "0.1.3" ``` ```rust use async_debug::AsyncDebug; use tokio::sync::RwLock; #[derive(AsyncDebug)] struct MyStruct { #[async_debug(async_call = RwLock::read, clone, ty = String)] my_value: RwLock } 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!\" }", ); ```