use crate::configurable::ConfigureGroupsWork;
use crate::state::State;
use crate::transactions::TransactionsWork;
use crate::utils::asyncevent::AsyncEvent;
use std::rc::Rc;
#[derive(Default)]
pub struct TreeSerialGroups {
scheduled: AsyncEvent,
}
impl TreeSerialGroups {
pub fn trigger(&self) {
self.scheduled.trigger();
}
}
pub async fn handle_tree_serial_groups_scheduled(state: Rc<State>) {
let tsgs = &state.tree.serial_groups;
let cgs = &state.tree.configure_groups;
let ts = &state.tree.transactions;
let mut cgsw = ConfigureGroupsWork::default();
let mut tsw = TransactionsWork::default();
loop {
tsgs.scheduled.triggered().await;
let serial = state.next_tree_serial();
ts.commit(&state, &mut tsw, serial);
cgs.run_scheduled(&mut cgsw, serial);
}
}