Peeking Inside Rust Futures: A Stream Implementation with Manual Poll Tracing via tokio-console Async Rust’s power comes from its zero-cost futures and lightweight task system, but debugging async code can feel like peeking into a black box. Futures and Streams rely on manual polling via the Future::poll and Stream::poll_next methods, and understanding their lifecycle is key to writing correct async code. In this guide, we’ll build a custom Stream implementation, add manual poll tracing to observe its behavior, and use tokio-console to inspect its internals in real time. Background: Rust Futures and Streams The Future trait is the core of async Rust. It defines a single method: fn poll(self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll . The Context provides a waker to notify the executor when the future is ready to make progress, and Poll is an enum with two variants: Ready(T) (the future has completed) and Pending (the future is waiting for work).…