use memscope_rs::{analyzer, track, MemScopeResult};
use std::rc::Rc;
use std::sync::Arc;
use std::time::Instant;
fn main() -> MemScopeResult<()> {
println!("Basic Usage Example - Unified `start()` API");
println!("============================================\n");
let start_time = Instant::now();
let guard = memscope_rs::start()?;
let data = vec![1, 2, 3, 4, 5];
track!(guard, data);
let string_data = String::from("Hello, world!");
track!(guard, string_data);
let rc_data = Rc::new(vec![1.0, 2.0, 3.0]);
track!(guard, rc_data);
let arc_data = Arc::new(vec![1.0, 2.0, 3.0]);
track!(guard, arc_data);
let boxed_data = Box::new(42);
track!(guard, boxed_data);
let duration = start_time.elapsed();
println!("\n=== Unified Analyzer API ===\n");
let mut az = analyzer(&guard)?;
let report = az.analyze();
println!("Analysis Report:");
println!(" Allocations: {}", report.stats.allocation_count);
println!(" Total Bytes: {}", report.stats.total_bytes);
println!(" Peak Bytes: {}", report.stats.peak_bytes);
println!(" Threads: {}", report.stats.thread_count);
println!();
let leaks = az.detect().leaks();
println!("Leak Detection:");
println!(" Leak Count: {}", leaks.leak_count);
println!(" Leaked Bytes: {}", leaks.total_leaked_bytes);
println!();
let metrics = az.metrics().summary();
println!("Metrics:");
println!(" Allocation Count: {}", metrics.allocation_count);
println!(" Total Bytes: {}", metrics.total_bytes);
println!(" Types: {}", metrics.by_type.len());
println!();
let snapshot = guard.snapshot_json()?;
println!("In-memory JSON snapshot length: {} bytes", snapshot.len());
println!("\nDrop will write dashboard + JSON to ./memscope-report/");
println!(
"\nExample finished in {:.2}ms",
duration.as_secs_f64() * 1000.0
);
drop(guard);
Ok(())
}