#![allow(non_snake_case)]
#[macro_export]
macro_rules! join {
($($fut:ident),* $(,)?) => { {
async {
$(
let mut $fut = $crate::MaybeDone::new($fut);
)*
$crate::utils::poll_fn(move |cx| {
use $crate::utils::future::Future;
use $crate::utils::task::Poll;
use $crate::utils::pin::Pin;
let mut all_done = true;
$(
let fut = unsafe { Pin::new_unchecked(&mut $fut) };
all_done &= Future::poll(fut, cx).is_ready();
)*
if all_done {
Poll::Ready(($(
unsafe { Pin::new_unchecked(&mut $fut) }.take().unwrap(),
)*))
} else {
Poll::Pending
}
}).await
}
} }
}