owl/examples/basic_global.rs
JMARyA 6c54873ca2
Some checks failed
ci/woodpecker/push/test Pipeline failed
init
2025-04-28 18:53:21 +02:00

81 lines
1.5 KiB
Rust

use owl::{get, prelude::*, query, save, set_global_db, update};
#[model]
#[derive(Debug)]
pub struct Item {
pub id: Id,
pub cost: f64,
pub strength: f64,
}
pub fn main() {
// Init
let db = Database::in_memory();
set_global_db!(db);
// Save
let item = Item {
id: Id::new_ulid(),
cost: 1.80,
strength: 0.4,
};
let first_id = item.id.clone();
dbg!(&item);
let item = save!(item);
// Get
let i: Model<Item> = get!(item.read().id.clone()).unwrap();
dbg!(&i.read());
save!(Item {
id: Id::new_ulid(),
cost: 0.3,
strength: 2.4,
});
save!(Item {
id: Id::new_ulid(),
cost: 3.4,
strength: 0.4,
});
save!(Item {
id: Id::new_ulid(),
cost: 20.0,
strength: 200.5,
});
save!(Item {
id: Id::new_ulid(),
cost: 4.2,
strength: 4.2,
});
// Query
let res = query!(|x: &Item| x.cost > 1.5);
dbg!(&res
.into_iter()
.map(|x| format!("{:?}", x.read()))
.collect::<Vec<_>>());
// Update
update!(&mut query!(|x: &Item| x.cost > 1.5), |x: &mut Item| {
x.cost += 1.0;
});
let item: Model<Item> = get!(first_id.to_string().as_str()).unwrap();
dbg!(&item.read());
assert_eq!(item.read().cost, 2.80);
// Aggregates
let count = query!(|x: &Item| x.cost > 1.5).len();
let sum: f64 = query!(|x: &Item| x.cost > 1.5)
.iter()
.map(|x| x.read().cost)
.sum();
dbg!(count);
dbg!(sum);
}