Skip to main content

taskgraph/utils/
macros.rs

1//! Macros for taskgraph-rs.
2//! Provides a DSL for defining task graphs.
3
4#[macro_export]
5macro_rules! task_node {
6    ($graph:ident, $name:expr, $job:expr) => {
7        $graph.task($crate::Task::new_static($name, $job), &[]).expect("Failed to add task")
8    };
9    ($graph:ident, $name:expr, $job:expr, deps: [$($dep:expr),*]) => {
10        $graph.task($crate::Task::new_static($name, $job), &[$($dep),*]).expect("Failed to add task")
11    };
12}
13
14/// A declarative macro to build a task graph.
15/// Example:
16/// let mut graph = StaticGraph::<10>::new(StaticStore::new());
17/// let a = task_node!(graph, "A", job_a);
18/// let b = task_node!(graph, "B", job_b, deps: [a]);
19#[macro_export]
20macro_rules! taskgraph {
21    ($storage:expr, [ $($name:expr => $job:expr $(, deps: [$($dep:ident),*])? );* $(;)? ]) => {{
22        let mut graph = $crate::TaskGraph::new($storage);
23        $(
24            let $($dep),* = (); // Placeholder to check if deps exist in current scope? No, needs better design.
25            let id = graph.task($crate::Task::new_static($name, $job), &[]).expect("Failed to add task");
26        )*
27        graph
28    }};
29}