61 lines
1.3 KiB
Rust
61 lines
1.3 KiB
Rust
use owl::prelude::*;
|
|
|
|
#[model]
|
|
#[derive(Debug)]
|
|
pub struct Contact {
|
|
pub id: Id,
|
|
pub age: u16,
|
|
}
|
|
|
|
pub fn age_one_year(p: &mut Model<Contact>, 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::<Contact, _, _>(
|
|
|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));
|
|
}
|