use std::cell::Cell;
use std::rc::Rc;
use tincan::Scope;
fn main() {
println!("=== Counter with Effects ===\n");
let cx = Scope::new();
let count = cx.signal(0);
let effect_runs = Rc::new(Cell::new(0));
let count_clone = count.clone();
let effect_runs_clone = Rc::clone(&effect_runs);
let _effect = cx.effect(move || {
effect_runs_clone.set(effect_runs_clone.get() + 1);
println!(
"Effect run #{}: Count is {}",
effect_runs_clone.get(),
count_clone.get()
);
});
println!("\nIncrementing counter...");
count.set(1);
count.set(2);
count.set(3);
println!("\nUsing update to increment:");
for _ in 0..3 {
count.update(|n| *n += 1);
}
println!("\nFinal count: {}", count.get());
println!("Total effect runs: {}", effect_runs.get());
println!("\n=== Multiple Effects ===\n");
let cx2 = Scope::new();
let value = cx2.signal(10);
let value_clone1 = value.clone();
let _effect1 = cx2.effect(move || {
println!("Effect 1: Value = {}", value_clone1.get());
});
let value_clone2 = value.clone();
let _effect2 = cx2.effect(move || {
println!(
"Effect 2: Value squared = {}",
value_clone2.get() * value_clone2.get()
);
});
value.set(5);
value.set(3);
}