use tincan::Scope;
fn main() {
println!("=== Temperature Converter ===\n");
let cx = Scope::new();
let celsius = cx.signal(0);
let fahrenheit = celsius.map(|c| c * 9 / 5 + 32);
let kelvin = celsius.map(|c| c + 273);
let celsius_clone = celsius.clone();
let fahrenheit_clone = fahrenheit.clone();
let kelvin_clone = kelvin.clone();
let _display = cx.effect(move || {
println!(
"🌡️ {}°C = {}°F = {}K",
celsius_clone.get(),
fahrenheit_clone.get(),
kelvin_clone.get()
);
});
println!("Water freezing point:");
celsius.set(0);
println!("\nRoom temperature:");
celsius.set(20);
println!("\nWater boiling point:");
celsius.set(100);
println!("\nVery cold:");
celsius.set(-40);
println!("\n=== Combining Multiple Sensors ===\n");
let cx2 = Scope::new();
let sensor1 = cx2.signal(20);
let sensor2 = cx2.signal(22);
let average = sensor1.clone()
.zip(sensor2.clone())
.map(|(t1, t2)| (t1 + t2) / 2);
let sensor1_clone = sensor1.clone();
let sensor2_clone = sensor2.clone();
let average_clone = average.clone();
let _sensor_display = cx2.effect(move || {
println!(
"Sensor 1: {}°C, Sensor 2: {}°C, Average: {}°C",
sensor1_clone.get(),
sensor2_clone.get(),
average_clone.get()
);
});
println!("Initial readings:");
println!();
println!("Sensor 1 increases:");
sensor1.set(25);
println!("\nSensor 2 increases:");
sensor2.set(27);
println!("\nBoth change:");
sensor1.set(30);
sensor2.set(30);
}