use nami::{Binding, Signal, SignalExt, binding};
fn main() {
let username: Binding<String> = binding(String::new());
let is_empty = username.is_empty();
let is_valid = username.is_empty().not();
println!("Username empty: {}", is_empty.get()); println!("Username valid: {}", is_valid.get());
username.set("alice".to_string());
println!("Username empty: {}", is_empty.get()); println!("Username valid: {}", is_valid.get());
let message: Binding<String> = binding("Hello, World!".to_string());
let char_count = message.str_len();
println!("Message length: {}", char_count.get());
message.set("Hi".to_string());
println!("Message length: {}", char_count.get());
let search_query: Binding<String> = binding("rust programming language".to_string());
let has_rust = search_query.contains("rust");
let has_python = search_query.contains("python");
println!("Contains 'rust': {}", has_rust.get()); println!("Contains 'python': {}", has_python.get());
search_query.set("python scripting".to_string());
println!("Contains 'rust': {}", has_rust.get()); println!("Contains 'python': {}", has_python.get());
let status: Binding<&str> = binding("loading...");
let is_loading = status.contains("loading");
let is_done = status.is_empty().not();
println!("Is loading: {}", is_loading.get()); println!("Has status: {}", is_done.get());
status.set("complete");
println!("Is loading: {}", is_loading.get());
let input: Binding<String> = binding(String::new());
let is_not_empty = input.is_empty().not();
let is_long_enough = input.str_len().ge(3);
let is_valid_input = is_not_empty.zip(&is_long_enough).map(|(a, b)| a && b);
println!("Valid input: {}", is_valid_input.get());
input.set("ab".to_string());
println!("Valid input: {}", is_valid_input.get());
input.set("abc".to_string());
println!("Valid input: {}", is_valid_input.get()); }