use owl::prelude::*; #[model] #[derive(Debug)] pub struct Contact { pub id: Id, pub age: u16, } pub fn age_one_year(p: &mut Model, db: &Database) { p.write(db, |p| p.age += 1); } pub fn main() { env_logger::init(); // Init let db = Database::in_memory(); let mut c1 = db.save(Contact { id: Id::String("c1".to_string()), age: 15, }); let mut c2 = db.save(Contact { id: Id::String("c2".to_string()), age: 17, }); let mut c3 = db.save(Contact { id: Id::String("c3".to_string()), age: 16, }); let age_18_watcher = db.watch::( |c| c.age == 18, |c| { println!("{} turned 18", c.id); }, ); std::thread::spawn(move || loop { age_18_watcher.process(); }); age_one_year(&mut c1, &db); age_one_year(&mut c2, &db); age_one_year(&mut c3, &db); age_one_year(&mut c1, &db); age_one_year(&mut c2, &db); age_one_year(&mut c3, &db); age_one_year(&mut c1, &db); age_one_year(&mut c2, &db); age_one_year(&mut c3, &db); age_one_year(&mut c1, &db); age_one_year(&mut c2, &db); age_one_year(&mut c3, &db); std::thread::sleep(std::time::Duration::from_secs(10)); }