timeout-tracing 0.1.0

Returns stack and span trace when the future hits a timeout
Documentation
use std::time::Duration;

use timeout_tracing::{DefaultTraceCapturer, timeout};
use tokio::time::sleep;
use tracing::instrument;
use tracing_error::ErrorLayer;
use tracing_subscriber::{layer::SubscriberExt, util::SubscriberInitExt};

#[tokio::main]
async fn main() {
    tracing_subscriber::registry()
        .with(ErrorLayer::default())
        .init();

    match timeout(
        Duration::from_secs(1),
        DefaultTraceCapturer,
        computation(25),
    )
    .await
    {
        Ok(()) => println!("Completed"),
        Err(elapsed) => println!("Timed out at\n{}", elapsed.active_traces[0].span_trace()),
    }
}

#[instrument]
async fn computation(n: i32) {
    for i in 0..n {
        step(i).await;
    }
}

#[instrument]
async fn step(i: i32) {
    sleep(Duration::from_millis(100)).await;
}