use actionqueue_core::ids::TaskId;
pub use actionqueue_executor_local::children::{ChildState, ChildrenSnapshot};
use actionqueue_storage::recovery::reducer::ReplayReducer;
pub fn build_children_snapshot(
projection: &ReplayReducer,
parent_id: TaskId,
) -> Option<ChildrenSnapshot> {
let children: Vec<ChildState> = projection
.task_records()
.filter(|tr| tr.task_spec().parent_task_id() == Some(parent_id))
.map(|tr| {
let child_id = tr.task_spec().id();
let run_states: Vec<_> = projection
.run_instances()
.filter(|r| r.task_id() == child_id)
.map(|r| (r.id(), r.state()))
.collect();
ChildState::new(child_id, run_states)
})
.collect();
if children.is_empty() {
None
} else {
Some(ChildrenSnapshot::new(children))
}
}