use async_inspect::prelude::*;
use colored::Colorize;
use std::time::Duration;
#[derive(Debug)]
#[allow(dead_code)]
struct User {
id: u64,
name: String,
email: String,
}
async fn fetch_profile(user_id: u64) -> User {
let _guard = TaskGuard::new(format!("fetch_profile({})", user_id));
inspect_point!("starting_profile_fetch");
tokio::time::sleep(Duration::from_millis(100)).await;
inspect_point!("profile_fetched");
User {
id: user_id,
name: format!("User {}", user_id),
email: format!("user{}@example.com", user_id),
}
}
async fn fetch_posts(user_id: u64) -> Vec<String> {
let _guard = TaskGuard::new(format!("fetch_posts({})", user_id));
inspect_point!("starting_posts_fetch");
tokio::time::sleep(Duration::from_millis(150)).await;
inspect_point!("posts_fetched", format!("Got {} posts", 3));
vec![
format!("Post 1 by user {}", user_id),
format!("Post 2 by user {}", user_id),
format!("Post 3 by user {}", user_id),
]
}
async fn fetch_user_data(user_id: u64) {
let _guard = TaskGuard::new(format!("fetch_user_data({})", user_id));
inspect_point!("start");
let user = fetch_profile(user_id).await;
inspect_point!("profile_complete", format!("Got user: {}", user.name));
let posts = fetch_posts(user_id).await;
inspect_point!("posts_complete", format!("Got {} posts", posts.len()));
println!("\nUser: {} ({})", user.name, user.email);
println!("Posts:");
for (i, post) in posts.iter().enumerate() {
println!(" {}. {}", i + 1, post);
}
inspect_point!("done");
}
async fn parallel_example() {
println!("\n=== Parallel Tasks Example ===\n");
let tasks = vec![
tokio::spawn(fetch_user_data(1)),
tokio::spawn(fetch_user_data(2)),
tokio::spawn(fetch_user_data(3)),
];
for task in tasks {
let _ = task.await;
}
}
async fn sequential_example() {
println!("\n=== Sequential Tasks Example ===\n");
fetch_user_data(10).await;
fetch_user_data(20).await;
fetch_user_data(30).await;
}
#[tokio::main]
async fn main() {
println!("{}", "[async-inspect]".on_purple().white().bold());
println!("{}", "Basic Inspection Example".bright_blue());
println!("===========================================\n");
Inspector::global().reset();
sequential_example().await;
tokio::time::sleep(Duration::from_millis(50)).await;
parallel_example().await;
tokio::time::sleep(Duration::from_millis(100)).await;
println!("\n=== Inspection Results ===\n");
let reporter = Reporter::global();
reporter.print_summary();
println!();
reporter.print_timeline();
println!();
reporter.print_compact_summary();
println!();
let report = reporter.generate_report();
println!("\n=== Text Report ===\n");
println!("{}", report);
}