task/manager/
relationships.rs

1// Relationships module - handles parent/child relationships between tasks
2
3use alloc::vec::Vec;
4
5use super::*;
6
7impl Manager {
8    /// Get the children tasks of a task.
9    pub async fn get_children(
10        &self,
11        task_identifier: TaskIdentifier,
12    ) -> Result<Vec<TaskIdentifier>> {
13        Ok(self
14            .0
15            .read()
16            .await
17            .tasks
18            .iter()
19            .filter(|(_, metadata)| metadata.parent == task_identifier)
20            .map(|(identifier, _)| *identifier)
21            .collect())
22    }
23
24    /// Get the parent task of a task.
25    pub async fn get_parent(&self, task_identifier: TaskIdentifier) -> Result<TaskIdentifier> {
26        Self::get_task(&*self.0.read().await, task_identifier).map(|task| task.parent)
27    }
28}