jay-compositor 1.14.0

The Jay compositor
use {
    crate::{
        configurable::ConfigureGroupsWork, state::State, transactions::TransactionsWork,
        utils::asyncevent::AsyncEvent,
    },
    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);
    }
}