use crate::builder::{NodeId, TaskHandle};
pub(crate) trait DepsTuple<Input> {
fn to_node_ids(self) -> Vec<NodeId>;
}
impl DepsTuple<()> for () {
fn to_node_ids(self) -> Vec<NodeId> {
Vec::new()
}
}
impl<O> DepsTuple<(O,)> for &TaskHandle<O> {
fn to_node_ids(self) -> Vec<NodeId> {
vec![self.id]
}
}
macro_rules! impl_deps_tuple {
($($O:ident),+) => {
impl<$($O),+> DepsTuple<($($O,)+)> for ($(&TaskHandle<$O>,)+)
{
#[allow(non_snake_case)]
fn to_node_ids(self) -> Vec<NodeId> {
let ($($O,)+) = self;
vec![$($O.id,)+]
}
}
};
}
impl_deps_tuple!(O1);
impl_deps_tuple!(O1, O2);
impl_deps_tuple!(O1, O2, O3);
impl_deps_tuple!(O1, O2, O3, O4);
impl_deps_tuple!(O1, O2, O3, O4, O5);
impl_deps_tuple!(O1, O2, O3, O4, O5, O6);
impl_deps_tuple!(O1, O2, O3, O4, O5, O6, O7);
impl_deps_tuple!(O1, O2, O3, O4, O5, O6, O7, O8);
#[cfg(test)]
mod tests;