use borrowscope_macro::trace_borrow;
use borrowscope_runtime::{get_events, reset};
#[trace_borrow(filter = "data*")]
fn process_with_filter() {
let data_input = vec![1, 2, 3]; let data_output = vec![4, 5, 6]; let temp = 42; let result = temp + 1;
println!("data_input: {:?}", data_input);
println!("data_output: {:?}", data_output);
println!("result: {}", result);
}
#[trace_borrow(sample = 0.1)]
fn process_with_sampling() {
let x = 1;
let y = 2;
let z = x + y;
println!("z = {}", z);
}
#[trace_borrow(debug_only, filter = "user*")]
fn process_user_data() {
let user_id = 123;
let user_name = "Alice";
let internal_counter = 0;
println!("User {} ({}), counter: {}", user_name, user_id, internal_counter);
}
fn main() {
println!("=== Filter Example ===");
reset();
process_with_filter();
let events = get_events();
println!("Events captured: {} (expected 4: 2 New + 2 Drop for data_* vars)", events.len());
for event in &events {
println!(" {:?}", event);
}
println!("\n=== Sampling Example (10% rate) ===");
println!("Running 100 iterations...");
let mut total_events = 0;
for _ in 0..100 {
reset();
process_with_sampling();
total_events += get_events().len();
}
println!("Total events across 100 runs: {} (expected ~60 with 10% sampling)", total_events);
println!("\n=== Combined Filter + Debug Only ===");
reset();
process_user_data();
let events = get_events();
println!("Events captured: {} (expected 4: 2 New + 2 Drop for user_* vars)", events.len());
for event in &events {
println!(" {:?}", event);
}
}