1macro_rules! declare_map_n {
2 (
3 #[doc = $ordinal:literal]
4 $name:ident::$fn_name:ident
5 ) => {
6 #[doc = "Allows to map the "]
7 #[doc = $ordinal]
8 #[doc = " element of a tuple to another type."]
9 pub trait $name<T, U> {
10 type Output;
11 fn $fn_name<Func>(self, f: Func) -> Self::Output
12 where
13 Func: FnOnce(T) -> U;
14 }
15 };
16}
17
18declare_map_n! {
19 TupleMap1::map_1
21}
22declare_map_n! {
23 TupleMap2::map_2
25}
26declare_map_n! {
27 TupleMap3::map_3
29}
30declare_map_n! {
31 TupleMap4::map_4
33}
34declare_map_n! {
35 TupleMap5::map_5
37}
38declare_map_n! {
39 TupleMap6::map_6
41}
42declare_map_n! {
43 TupleMap7::map_7
45}
46declare_map_n! {
47 TupleMap8::map_8
49}
50
51macro_rules! impl_map_n {
52 (
53 $trait:ident::$fn:ident for ( $( $before:ident, )* _ $( , $after:ident )* $(,)? ) $(,)?
54 ) => {
55 impl<$( $before, )* $( $after, )* T, U> $trait<T, U> for ( $( $before, )* T, $( $after, )* ) {
56 type Output = ( $( $before, )* U, $( $after, )* );
57
58 #[allow(non_snake_case)]
59 fn $fn<Func>(self, f: Func) -> Self::Output
60 where
61 Func: FnOnce(T) -> U,
62 {
63 let ( $( $before, )* t, $( $after, )* ) = self;
64 let u = f(t);
65 ( $( $before, )* u, $( $after, )* )
66 }
67 }
68 };
69}
70
71impl_map_n! { TupleMap1::map_1 for (_,) }
72impl_map_n! { TupleMap1::map_1 for (_, B) }
73impl_map_n! { TupleMap1::map_1 for (_, B, C) }
74impl_map_n! { TupleMap1::map_1 for (_, B, C, D) }
75impl_map_n! { TupleMap1::map_1 for (_, B, C, D, E) }
76impl_map_n! { TupleMap1::map_1 for (_, B, C, D, E, F) }
77impl_map_n! { TupleMap1::map_1 for (_, B, C, D, E, F, G) }
78impl_map_n! { TupleMap1::map_1 for (_, B, C, D, E, F, G, H) }
79
80impl_map_n! { TupleMap2::map_2 for (A, _) }
81impl_map_n! { TupleMap2::map_2 for (A, _, C) }
82impl_map_n! { TupleMap2::map_2 for (A, _, C, D) }
83impl_map_n! { TupleMap2::map_2 for (A, _, C, D, E) }
84impl_map_n! { TupleMap2::map_2 for (A, _, C, D, E, F) }
85impl_map_n! { TupleMap2::map_2 for (A, _, C, D, E, F, G) }
86impl_map_n! { TupleMap2::map_2 for (A, _, C, D, E, F, G, H) }
87
88impl_map_n! { TupleMap3::map_3 for (A, B, _) }
89impl_map_n! { TupleMap3::map_3 for (A, B, _, D) }
90impl_map_n! { TupleMap3::map_3 for (A, B, _, D, E) }
91impl_map_n! { TupleMap3::map_3 for (A, B, _, D, E, F) }
92impl_map_n! { TupleMap3::map_3 for (A, B, _, D, E, F, G) }
93impl_map_n! { TupleMap3::map_3 for (A, B, _, D, E, F, G, H) }
94
95impl_map_n! { TupleMap4::map_4 for (A, B, C, _) }
96impl_map_n! { TupleMap4::map_4 for (A, B, C, _, E) }
97impl_map_n! { TupleMap4::map_4 for (A, B, C, _, E, F) }
98impl_map_n! { TupleMap4::map_4 for (A, B, C, _, E, F, G) }
99impl_map_n! { TupleMap4::map_4 for (A, B, C, _, E, F, G, H) }
100
101impl_map_n! { TupleMap5::map_5 for (A, B, C, D, _) }
102impl_map_n! { TupleMap5::map_5 for (A, B, C, D, _, F) }
103impl_map_n! { TupleMap5::map_5 for (A, B, C, D, _, F, G) }
104impl_map_n! { TupleMap5::map_5 for (A, B, C, D, _, F, G, H) }
105
106impl_map_n! { TupleMap6::map_6 for (A, B, C, D, E, _) }
107impl_map_n! { TupleMap6::map_6 for (A, B, C, D, E, _, G) }
108impl_map_n! { TupleMap6::map_6 for (A, B, C, D, E, _, G, H) }
109
110impl_map_n! { TupleMap7::map_7 for (A, B, C, D, E, F, _) }
111impl_map_n! { TupleMap7::map_7 for (A, B, C, D, E, F, _, H) }
112
113impl_map_n! { TupleMap8::map_8 for (A, B, C, D, E, F, G, _) }