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