1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
#[cfg(any( feature = "util", feature = "spawn-ready", feature = "filter", feature = "make" ))] macro_rules! opaque_future { ($(#[$m:meta])* pub type $name:ident<$($param:ident),+> = $actual:ty;) => { #[pin_project::pin_project] $(#[$m])* pub struct $name<$($param),+>(#[pin] pub(crate) $actual); impl<$($param),+> std::fmt::Debug for $name<$($param),+> { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { f.debug_tuple(stringify!($name)).field(&format_args!("...")).finish() } } impl<$($param),+> std::future::Future for $name<$($param),+> where $actual: std::future::Future, { type Output = <$actual as std::future::Future>::Output; #[inline] fn poll(self: std::pin::Pin<&mut Self>, cx: &mut std::task::Context<'_>) -> std::task::Poll<Self::Output> { self.project().0.poll(cx) } } } }