| #[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_lite::pin_project! { | |
| $(#[$m])* | |
| pub struct $name<$($param),+> { | |
| #[pin] | |
| inner: $actual | |
| } | |
| } | |
| impl<$($param),+> $name<$($param),+> { | |
| pub(crate) fn new(inner: $actual) -> Self { | |
| Self { | |
| inner | |
| } | |
| } | |
| } | |
| 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().inner.poll(cx) | |
| } | |
| } | |
| } | |
| } |