tower_layer/
tuple.rs

1use crate::Layer;
2
3impl<S> Layer<S> for () {
4    type Service = S;
5
6    fn layer(&self, service: S) -> Self::Service {
7        service
8    }
9}
10
11impl<S, L1> Layer<S> for (L1,)
12where
13    L1: Layer<S>,
14{
15    type Service = L1::Service;
16
17    fn layer(&self, service: S) -> Self::Service {
18        let (l1,) = self;
19        l1.layer(service)
20    }
21}
22
23impl<S, L1, L2> Layer<S> for (L1, L2)
24where
25    L1: Layer<L2::Service>,
26    L2: Layer<S>,
27{
28    type Service = L1::Service;
29
30    fn layer(&self, service: S) -> Self::Service {
31        let (l1, l2) = self;
32        l1.layer(l2.layer(service))
33    }
34}
35
36impl<S, L1, L2, L3> Layer<S> for (L1, L2, L3)
37where
38    L1: Layer<L2::Service>,
39    L2: Layer<L3::Service>,
40    L3: Layer<S>,
41{
42    type Service = L1::Service;
43
44    fn layer(&self, service: S) -> Self::Service {
45        let (l1, l2, l3) = self;
46        l1.layer((l2, l3).layer(service))
47    }
48}
49
50impl<S, L1, L2, L3, L4> Layer<S> for (L1, L2, L3, L4)
51where
52    L1: Layer<L2::Service>,
53    L2: Layer<L3::Service>,
54    L3: Layer<L4::Service>,
55    L4: Layer<S>,
56{
57    type Service = L1::Service;
58
59    fn layer(&self, service: S) -> Self::Service {
60        let (l1, l2, l3, l4) = self;
61        l1.layer((l2, l3, l4).layer(service))
62    }
63}
64
65impl<S, L1, L2, L3, L4, L5> Layer<S> for (L1, L2, L3, L4, L5)
66where
67    L1: Layer<L2::Service>,
68    L2: Layer<L3::Service>,
69    L3: Layer<L4::Service>,
70    L4: Layer<L5::Service>,
71    L5: Layer<S>,
72{
73    type Service = L1::Service;
74
75    fn layer(&self, service: S) -> Self::Service {
76        let (l1, l2, l3, l4, l5) = self;
77        l1.layer((l2, l3, l4, l5).layer(service))
78    }
79}
80
81impl<S, L1, L2, L3, L4, L5, L6> Layer<S> for (L1, L2, L3, L4, L5, L6)
82where
83    L1: Layer<L2::Service>,
84    L2: Layer<L3::Service>,
85    L3: Layer<L4::Service>,
86    L4: Layer<L5::Service>,
87    L5: Layer<L6::Service>,
88    L6: Layer<S>,
89{
90    type Service = L1::Service;
91
92    fn layer(&self, service: S) -> Self::Service {
93        let (l1, l2, l3, l4, l5, l6) = self;
94        l1.layer((l2, l3, l4, l5, l6).layer(service))
95    }
96}
97
98impl<S, L1, L2, L3, L4, L5, L6, L7> Layer<S> for (L1, L2, L3, L4, L5, L6, L7)
99where
100    L1: Layer<L2::Service>,
101    L2: Layer<L3::Service>,
102    L3: Layer<L4::Service>,
103    L4: Layer<L5::Service>,
104    L5: Layer<L6::Service>,
105    L6: Layer<L7::Service>,
106    L7: Layer<S>,
107{
108    type Service = L1::Service;
109
110    fn layer(&self, service: S) -> Self::Service {
111        let (l1, l2, l3, l4, l5, l6, l7) = self;
112        l1.layer((l2, l3, l4, l5, l6, l7).layer(service))
113    }
114}
115
116impl<S, L1, L2, L3, L4, L5, L6, L7, L8> Layer<S> for (L1, L2, L3, L4, L5, L6, L7, L8)
117where
118    L1: Layer<L2::Service>,
119    L2: Layer<L3::Service>,
120    L3: Layer<L4::Service>,
121    L4: Layer<L5::Service>,
122    L5: Layer<L6::Service>,
123    L6: Layer<L7::Service>,
124    L7: Layer<L8::Service>,
125    L8: Layer<S>,
126{
127    type Service = L1::Service;
128
129    fn layer(&self, service: S) -> Self::Service {
130        let (l1, l2, l3, l4, l5, l6, l7, l8) = self;
131        l1.layer((l2, l3, l4, l5, l6, l7, l8).layer(service))
132    }
133}
134
135impl<S, L1, L2, L3, L4, L5, L6, L7, L8, L9> Layer<S> for (L1, L2, L3, L4, L5, L6, L7, L8, L9)
136where
137    L1: Layer<L2::Service>,
138    L2: Layer<L3::Service>,
139    L3: Layer<L4::Service>,
140    L4: Layer<L5::Service>,
141    L5: Layer<L6::Service>,
142    L6: Layer<L7::Service>,
143    L7: Layer<L8::Service>,
144    L8: Layer<L9::Service>,
145    L9: Layer<S>,
146{
147    type Service = L1::Service;
148
149    fn layer(&self, service: S) -> Self::Service {
150        let (l1, l2, l3, l4, l5, l6, l7, l8, l9) = self;
151        l1.layer((l2, l3, l4, l5, l6, l7, l8, l9).layer(service))
152    }
153}
154
155impl<S, L1, L2, L3, L4, L5, L6, L7, L8, L9, L10> Layer<S>
156    for (L1, L2, L3, L4, L5, L6, L7, L8, L9, L10)
157where
158    L1: Layer<L2::Service>,
159    L2: Layer<L3::Service>,
160    L3: Layer<L4::Service>,
161    L4: Layer<L5::Service>,
162    L5: Layer<L6::Service>,
163    L6: Layer<L7::Service>,
164    L7: Layer<L8::Service>,
165    L8: Layer<L9::Service>,
166    L9: Layer<L10::Service>,
167    L10: Layer<S>,
168{
169    type Service = L1::Service;
170
171    fn layer(&self, service: S) -> Self::Service {
172        let (l1, l2, l3, l4, l5, l6, l7, l8, l9, l10) = self;
173        l1.layer((l2, l3, l4, l5, l6, l7, l8, l9, l10).layer(service))
174    }
175}
176
177impl<S, L1, L2, L3, L4, L5, L6, L7, L8, L9, L10, L11> Layer<S>
178    for (L1, L2, L3, L4, L5, L6, L7, L8, L9, L10, L11)
179where
180    L1: Layer<L2::Service>,
181    L2: Layer<L3::Service>,
182    L3: Layer<L4::Service>,
183    L4: Layer<L5::Service>,
184    L5: Layer<L6::Service>,
185    L6: Layer<L7::Service>,
186    L7: Layer<L8::Service>,
187    L8: Layer<L9::Service>,
188    L9: Layer<L10::Service>,
189    L10: Layer<L11::Service>,
190    L11: Layer<S>,
191{
192    type Service = L1::Service;
193
194    fn layer(&self, service: S) -> Self::Service {
195        let (l1, l2, l3, l4, l5, l6, l7, l8, l9, l10, l11) = self;
196        l1.layer((l2, l3, l4, l5, l6, l7, l8, l9, l10, l11).layer(service))
197    }
198}
199
200impl<S, L1, L2, L3, L4, L5, L6, L7, L8, L9, L10, L11, L12> Layer<S>
201    for (L1, L2, L3, L4, L5, L6, L7, L8, L9, L10, L11, L12)
202where
203    L1: Layer<L2::Service>,
204    L2: Layer<L3::Service>,
205    L3: Layer<L4::Service>,
206    L4: Layer<L5::Service>,
207    L5: Layer<L6::Service>,
208    L6: Layer<L7::Service>,
209    L7: Layer<L8::Service>,
210    L8: Layer<L9::Service>,
211    L9: Layer<L10::Service>,
212    L10: Layer<L11::Service>,
213    L11: Layer<L12::Service>,
214    L12: Layer<S>,
215{
216    type Service = L1::Service;
217
218    fn layer(&self, service: S) -> Self::Service {
219        let (l1, l2, l3, l4, l5, l6, l7, l8, l9, l10, l11, l12) = self;
220        l1.layer((l2, l3, l4, l5, l6, l7, l8, l9, l10, l11, l12).layer(service))
221    }
222}
223
224impl<S, L1, L2, L3, L4, L5, L6, L7, L8, L9, L10, L11, L12, L13> Layer<S>
225    for (L1, L2, L3, L4, L5, L6, L7, L8, L9, L10, L11, L12, L13)
226where
227    L1: Layer<L2::Service>,
228    L2: Layer<L3::Service>,
229    L3: Layer<L4::Service>,
230    L4: Layer<L5::Service>,
231    L5: Layer<L6::Service>,
232    L6: Layer<L7::Service>,
233    L7: Layer<L8::Service>,
234    L8: Layer<L9::Service>,
235    L9: Layer<L10::Service>,
236    L10: Layer<L11::Service>,
237    L11: Layer<L12::Service>,
238    L12: Layer<L13::Service>,
239    L13: Layer<S>,
240{
241    type Service = L1::Service;
242
243    fn layer(&self, service: S) -> Self::Service {
244        let (l1, l2, l3, l4, l5, l6, l7, l8, l9, l10, l11, l12, l13) = self;
245        l1.layer((l2, l3, l4, l5, l6, l7, l8, l9, l10, l11, l12, l13).layer(service))
246    }
247}
248
249impl<S, L1, L2, L3, L4, L5, L6, L7, L8, L9, L10, L11, L12, L13, L14> Layer<S>
250    for (L1, L2, L3, L4, L5, L6, L7, L8, L9, L10, L11, L12, L13, L14)
251where
252    L1: Layer<L2::Service>,
253    L2: Layer<L3::Service>,
254    L3: Layer<L4::Service>,
255    L4: Layer<L5::Service>,
256    L5: Layer<L6::Service>,
257    L6: Layer<L7::Service>,
258    L7: Layer<L8::Service>,
259    L8: Layer<L9::Service>,
260    L9: Layer<L10::Service>,
261    L10: Layer<L11::Service>,
262    L11: Layer<L12::Service>,
263    L12: Layer<L13::Service>,
264    L13: Layer<L14::Service>,
265    L14: Layer<S>,
266{
267    type Service = L1::Service;
268
269    fn layer(&self, service: S) -> Self::Service {
270        let (l1, l2, l3, l4, l5, l6, l7, l8, l9, l10, l11, l12, l13, l14) = self;
271        l1.layer((l2, l3, l4, l5, l6, l7, l8, l9, l10, l11, l12, l13, l14).layer(service))
272    }
273}
274
275#[rustfmt::skip]
276impl<S, L1, L2, L3, L4, L5, L6, L7, L8, L9, L10, L11, L12, L13, L14, L15> Layer<S>
277    for (L1, L2, L3, L4, L5, L6, L7, L8, L9, L10, L11, L12, L13, L14, L15)
278where
279    L1: Layer<L2::Service>,
280    L2: Layer<L3::Service>,
281    L3: Layer<L4::Service>,
282    L4: Layer<L5::Service>,
283    L5: Layer<L6::Service>,
284    L6: Layer<L7::Service>,
285    L7: Layer<L8::Service>,
286    L8: Layer<L9::Service>,
287    L9: Layer<L10::Service>,
288    L10: Layer<L11::Service>,
289    L11: Layer<L12::Service>,
290    L12: Layer<L13::Service>,
291    L13: Layer<L14::Service>,
292    L14: Layer<L15::Service>,
293    L15: Layer<S>,
294{
295    type Service = L1::Service;
296
297    fn layer(&self, service: S) -> Self::Service {
298        let (l1, l2, l3, l4, l5, l6, l7, l8, l9, l10, l11, l12, l13, l14, l15) = self;
299        l1.layer((l2, l3, l4, l5, l6, l7, l8, l9, l10, l11, l12, l13, l14, l15).layer(service))
300    }
301}
302
303#[rustfmt::skip]
304impl<S, L1, L2, L3, L4, L5, L6, L7, L8, L9, L10, L11, L12, L13, L14, L15, L16> Layer<S>
305    for (L1, L2, L3, L4, L5, L6, L7, L8, L9, L10, L11, L12, L13, L14, L15, L16)
306where
307    L1: Layer<L2::Service>,
308    L2: Layer<L3::Service>,
309    L3: Layer<L4::Service>,
310    L4: Layer<L5::Service>,
311    L5: Layer<L6::Service>,
312    L6: Layer<L7::Service>,
313    L7: Layer<L8::Service>,
314    L8: Layer<L9::Service>,
315    L9: Layer<L10::Service>,
316    L10: Layer<L11::Service>,
317    L11: Layer<L12::Service>,
318    L12: Layer<L13::Service>,
319    L13: Layer<L14::Service>,
320    L14: Layer<L15::Service>,
321    L15: Layer<L16::Service>,
322    L16: Layer<S>,
323{
324    type Service = L1::Service;
325
326    fn layer(&self, service: S) -> Self::Service {
327        let (l1, l2, l3, l4, l5, l6, l7, l8, l9, l10, l11, l12, l13, l14, l15, l16) = self;
328        l1.layer((l2, l3, l4, l5, l6, l7, l8, l9, l10, l11, l12, l13, l14, l15, l16).layer(service))
329    }
330}