1macro_rules! opaque_future {
4 ($(#[$m:meta])* pub type $name:ident = $actual:ty;) => {
5 opaque_future! {
6 $(#[$m])*
7 pub type $name<> = $actual;
8 }
9 };
10
11 ($(#[$m:meta])* pub type $name:ident<$($param:ident),*> = $actual:ty;) => {
12 pin_project_lite::pin_project! {
13 $(#[$m])*
14 pub struct $name<$($param),*> {
15 #[pin] future: $actual,
16 }
17 }
18
19 impl<$($param),*> $name<$($param),*> {
20 pub(crate) fn new(future: $actual) -> Self {
21 Self { future }
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_struct(stringify!($name)).finish_non_exhaustive()
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
37 #[inline]
38 fn poll(
39 self: std::pin::Pin<&mut Self>,
40 cx: &mut std::task::Context<'_>,
41 ) -> std::task::Poll<Self::Output> {
42 self.project().future.poll(cx)
43 }
44 }
45 };
46}
47
48#[rustfmt::skip]
49macro_rules! all_the_tuples {
50 ($name:ident) => {
51 $name!([], T1);
52 $name!([T1], T2);
53 $name!([T1, T2], T3);
54 $name!([T1, T2, T3], T4);
55 $name!([T1, T2, T3, T4], T5);
56 $name!([T1, T2, T3, T4, T5], T6);
57 $name!([T1, T2, T3, T4, T5, T6], T7);
58 $name!([T1, T2, T3, T4, T5, T6, T7], T8);
59 $name!([T1, T2, T3, T4, T5, T6, T7, T8], T9);
60 $name!([T1, T2, T3, T4, T5, T6, T7, T8, T9], T10);
61 $name!([T1, T2, T3, T4, T5, T6, T7, T8, T9, T10], T11);
62 $name!([T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11], T12);
63 $name!([T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12], T13);
64 $name!([T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13], T14);
65 $name!([T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14], T15);
66 $name!([T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15], T16);
67 };
68}
69
70#[cfg(feature = "tracing")]
71macro_rules! trace {
72 ($($tt:tt)*) => {
73 tracing::trace!($($tt)*)
74 }
75}
76
77#[cfg(feature = "tracing")]
78macro_rules! error {
79 ($($tt:tt)*) => {
80 tracing::error!($($tt)*)
81 };
82}
83
84#[cfg(not(feature = "tracing"))]
85macro_rules! trace {
86 ($($tt:tt)*) => {};
87}
88
89#[cfg(not(feature = "tracing"))]
90macro_rules! error {
91 ($($tt:tt)*) => {};
92}