use borrowscope_runtime::*;
use std::pin::Pin;
fn main() {
reset();
println!("=== Pin Tracking Example ===\n");
println!("--- Box::pin ---");
let pinned_int = track_pin_new("pinned_int", "main.rs:13", Box::pin(42));
println!("Pinned integer: {}", *pinned_int);
let pinned_string = track_pin_new("pinned_string", "main.rs:16", Box::pin(String::from("pinned!")));
println!("Pinned string: {}", &*pinned_string);
println!("\n--- Pinned Struct ---");
#[derive(Debug)]
struct Data {
value: i32,
name: String,
}
let pinned_struct = track_pin_new(
"pinned_struct",
"main.rs:27",
Box::pin(Data {
value: 100,
name: String::from("important"),
}),
);
println!("Pinned struct: {:?}", &*pinned_struct);
println!("\n--- Pin::new with Box ---");
let boxed = Box::new(vec![1, 2, 3]);
let pinned_box = track_pin_new("pinned_box", "main.rs:39", Pin::new(boxed));
println!("Pinned box contents: {:?}", &*pinned_box);
println!("\n--- Pin::into_inner ---");
let pinned = Box::pin(String::from("extract me"));
let pinned = track_pin_new("to_extract", "main.rs:45", pinned);
println!("Before extraction: {}", &*pinned);
let extracted = track_pin_into_inner("to_extract", "main.rs:48", Pin::into_inner(pinned));
println!("After extraction: {}", &*extracted);
println!("\n--- Multiple Pinned Values ---");
let pins: Vec<Pin<Box<i32>>> = (1..=5)
.map(|i| track_pin_new(&format!("pin_{}", i), "main.rs:54", Box::pin(i * 10)))
.collect();
let sum: i32 = pins.iter().map(|p| **p).sum();
println!("Sum of pinned values: {}", sum);
println!("\n=== Tracked Events ===");
for (i, event) in get_events().iter().enumerate() {
println!("{:3}: {:?}", i, event);
}
}