commit
6c54873ca2
34 changed files with 5502 additions and 0 deletions
61
examples/references.rs
Normal file
61
examples/references.rs
Normal file
|
@ -0,0 +1,61 @@
|
|||
use owl::{db::model::person::Person, prelude::*};
|
||||
|
||||
#[model]
|
||||
#[derive(Debug)]
|
||||
pub struct Car {
|
||||
pub id: Id,
|
||||
pub price: u32,
|
||||
pub driver: IdRef<Person>,
|
||||
}
|
||||
|
||||
pub fn main() {
|
||||
env_logger::init();
|
||||
|
||||
// Init
|
||||
let db = Database::in_memory();
|
||||
|
||||
let per = Person::new_id("perso", "P1", "");
|
||||
let per2: Person = Person::new_id("perso2", "P2", "");
|
||||
|
||||
// Save
|
||||
let car = Car {
|
||||
id: Id::new_ulid(),
|
||||
price: 1000,
|
||||
driver: per.reference(),
|
||||
};
|
||||
db.save(per);
|
||||
let per2 = db.save(per2);
|
||||
let mut car = db.save(car);
|
||||
|
||||
println!(
|
||||
"P1 has {} cars",
|
||||
db.query(|car: &Car| {
|
||||
car.driver
|
||||
.dereference(&db)
|
||||
.read()
|
||||
.first_name
|
||||
.current()
|
||||
.unwrap()
|
||||
.as_str()
|
||||
== "P1"
|
||||
})
|
||||
.iter()
|
||||
.count()
|
||||
);
|
||||
|
||||
car.write(&db, |car| {
|
||||
car.driver = per2.reference();
|
||||
});
|
||||
|
||||
println!(
|
||||
"P1 has {} cars",
|
||||
db.query(|car: &Car| {
|
||||
car.driver
|
||||
.try_dereference(&db)
|
||||
.map(|x| x.read().first_name.current().unwrap().as_str() == "P1")
|
||||
.unwrap_or(false)
|
||||
})
|
||||
.iter()
|
||||
.count()
|
||||
);
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue