1pub trait Layer<S>: Sized {
9 type Service;
11
12 fn layer(&self, inner: S) -> Self::Service;
14
15 fn into_layer(self, inner: S) -> Self::Service {
23 self.layer(inner)
24 }
25}
26
27impl<T, S> Layer<S> for &T
28where
29 T: Layer<S>,
30{
31 type Service = T::Service;
32
33 fn layer(&self, inner: S) -> Self::Service {
34 (**self).layer(inner)
35 }
36
37 fn into_layer(self, inner: S) -> Self::Service {
38 (*self).layer(inner)
39 }
40}
41
42impl<L, S> Layer<S> for Option<L>
43where
44 L: Layer<S>,
45{
46 type Service = crate::combinators::Either<L::Service, S>;
47
48 fn layer(&self, inner: S) -> Self::Service {
49 match self {
50 Some(layer) => crate::combinators::Either::A(layer.layer(inner)),
51 None => crate::combinators::Either::B(inner),
52 }
53 }
54
55 fn into_layer(self, inner: S) -> Self::Service {
56 match self {
57 Some(layer) => crate::combinators::Either::A(layer.into_layer(inner)),
58 None => crate::combinators::Either::B(inner),
59 }
60 }
61}
62
63impl<S> Layer<S> for () {
64 type Service = S;
65
66 fn layer(&self, service: S) -> Self::Service {
67 service
68 }
69}
70
71impl<S, L1> Layer<S> for (L1,)
72where
73 L1: Layer<S>,
74{
75 type Service = L1::Service;
76
77 fn layer(&self, service: S) -> Self::Service {
78 let (l1,) = self;
79 l1.layer(service)
80 }
81
82 fn into_layer(self, service: S) -> Self::Service {
83 let (l1,) = self;
84 l1.into_layer(service)
85 }
86}
87
88impl<S, L1, L2> Layer<S> for (L1, L2)
89where
90 L1: Layer<L2::Service>,
91 L2: Layer<S>,
92{
93 type Service = L1::Service;
94
95 fn layer(&self, service: S) -> Self::Service {
96 let (l1, l2) = self;
97 l1.layer(l2.layer(service))
98 }
99
100 fn into_layer(self, service: S) -> Self::Service {
101 let (l1, l2) = self;
102 l1.into_layer(l2.into_layer(service))
103 }
104}
105
106impl<S, L1, L2, L3> Layer<S> for (L1, L2, L3)
107where
108 L1: Layer<L2::Service>,
109 L2: Layer<L3::Service>,
110 L3: Layer<S>,
111{
112 type Service = L1::Service;
113
114 fn layer(&self, service: S) -> Self::Service {
115 let (l1, l2, l3) = self;
116 l1.layer((l2, l3).layer(service))
117 }
118
119 fn into_layer(self, service: S) -> Self::Service {
120 let (l1, l2, l3) = self;
121 l1.into_layer((l2, l3).into_layer(service))
122 }
123}
124
125impl<S, L1, L2, L3, L4> Layer<S> for (L1, L2, L3, L4)
126where
127 L1: Layer<L2::Service>,
128 L2: Layer<L3::Service>,
129 L3: Layer<L4::Service>,
130 L4: Layer<S>,
131{
132 type Service = L1::Service;
133
134 fn layer(&self, service: S) -> Self::Service {
135 let (l1, l2, l3, l4) = self;
136 l1.layer((l2, l3, l4).layer(service))
137 }
138
139 fn into_layer(self, service: S) -> Self::Service {
140 let (l1, l2, l3, l4) = self;
141 l1.into_layer((l2, l3, l4).into_layer(service))
142 }
143}
144
145impl<S, L1, L2, L3, L4, L5> Layer<S> for (L1, L2, L3, L4, L5)
146where
147 L1: Layer<L2::Service>,
148 L2: Layer<L3::Service>,
149 L3: Layer<L4::Service>,
150 L4: Layer<L5::Service>,
151 L5: Layer<S>,
152{
153 type Service = L1::Service;
154
155 fn layer(&self, service: S) -> Self::Service {
156 let (l1, l2, l3, l4, l5) = self;
157 l1.layer((l2, l3, l4, l5).layer(service))
158 }
159
160 fn into_layer(self, service: S) -> Self::Service {
161 let (l1, l2, l3, l4, l5) = self;
162 l1.into_layer((l2, l3, l4, l5).into_layer(service))
163 }
164}
165
166impl<S, L1, L2, L3, L4, L5, L6> Layer<S> for (L1, L2, L3, L4, L5, L6)
167where
168 L1: Layer<L2::Service>,
169 L2: Layer<L3::Service>,
170 L3: Layer<L4::Service>,
171 L4: Layer<L5::Service>,
172 L5: Layer<L6::Service>,
173 L6: Layer<S>,
174{
175 type Service = L1::Service;
176
177 fn layer(&self, service: S) -> Self::Service {
178 let (l1, l2, l3, l4, l5, l6) = self;
179 l1.layer((l2, l3, l4, l5, l6).layer(service))
180 }
181
182 fn into_layer(self, service: S) -> Self::Service {
183 let (l1, l2, l3, l4, l5, l6) = self;
184 l1.into_layer((l2, l3, l4, l5, l6).into_layer(service))
185 }
186}
187
188impl<S, L1, L2, L3, L4, L5, L6, L7> Layer<S> for (L1, L2, L3, L4, L5, L6, L7)
189where
190 L1: Layer<L2::Service>,
191 L2: Layer<L3::Service>,
192 L3: Layer<L4::Service>,
193 L4: Layer<L5::Service>,
194 L5: Layer<L6::Service>,
195 L6: Layer<L7::Service>,
196 L7: Layer<S>,
197{
198 type Service = L1::Service;
199
200 fn layer(&self, service: S) -> Self::Service {
201 let (l1, l2, l3, l4, l5, l6, l7) = self;
202 l1.layer((l2, l3, l4, l5, l6, l7).layer(service))
203 }
204
205 fn into_layer(self, service: S) -> Self::Service {
206 let (l1, l2, l3, l4, l5, l6, l7) = self;
207 l1.into_layer((l2, l3, l4, l5, l6, l7).into_layer(service))
208 }
209}
210
211impl<S, L1, L2, L3, L4, L5, L6, L7, L8> Layer<S> for (L1, L2, L3, L4, L5, L6, L7, L8)
212where
213 L1: Layer<L2::Service>,
214 L2: Layer<L3::Service>,
215 L3: Layer<L4::Service>,
216 L4: Layer<L5::Service>,
217 L5: Layer<L6::Service>,
218 L6: Layer<L7::Service>,
219 L7: Layer<L8::Service>,
220 L8: Layer<S>,
221{
222 type Service = L1::Service;
223
224 fn layer(&self, service: S) -> Self::Service {
225 let (l1, l2, l3, l4, l5, l6, l7, l8) = self;
226 l1.layer((l2, l3, l4, l5, l6, l7, l8).layer(service))
227 }
228
229 fn into_layer(self, service: S) -> Self::Service {
230 let (l1, l2, l3, l4, l5, l6, l7, l8) = self;
231 l1.into_layer((l2, l3, l4, l5, l6, l7, l8).into_layer(service))
232 }
233}
234
235impl<S, L1, L2, L3, L4, L5, L6, L7, L8, L9> Layer<S> for (L1, L2, L3, L4, L5, L6, L7, L8, L9)
236where
237 L1: Layer<L2::Service>,
238 L2: Layer<L3::Service>,
239 L3: Layer<L4::Service>,
240 L4: Layer<L5::Service>,
241 L5: Layer<L6::Service>,
242 L6: Layer<L7::Service>,
243 L7: Layer<L8::Service>,
244 L8: Layer<L9::Service>,
245 L9: Layer<S>,
246{
247 type Service = L1::Service;
248
249 fn layer(&self, service: S) -> Self::Service {
250 let (l1, l2, l3, l4, l5, l6, l7, l8, l9) = self;
251 l1.layer((l2, l3, l4, l5, l6, l7, l8, l9).layer(service))
252 }
253
254 fn into_layer(self, service: S) -> Self::Service {
255 let (l1, l2, l3, l4, l5, l6, l7, l8, l9) = self;
256 l1.into_layer((l2, l3, l4, l5, l6, l7, l8, l9).into_layer(service))
257 }
258}
259
260impl<S, L1, L2, L3, L4, L5, L6, L7, L8, L9, L10> Layer<S>
261 for (L1, L2, L3, L4, L5, L6, L7, L8, L9, L10)
262where
263 L1: Layer<L2::Service>,
264 L2: Layer<L3::Service>,
265 L3: Layer<L4::Service>,
266 L4: Layer<L5::Service>,
267 L5: Layer<L6::Service>,
268 L6: Layer<L7::Service>,
269 L7: Layer<L8::Service>,
270 L8: Layer<L9::Service>,
271 L9: Layer<L10::Service>,
272 L10: Layer<S>,
273{
274 type Service = L1::Service;
275
276 fn layer(&self, service: S) -> Self::Service {
277 let (l1, l2, l3, l4, l5, l6, l7, l8, l9, l10) = self;
278 l1.layer((l2, l3, l4, l5, l6, l7, l8, l9, l10).layer(service))
279 }
280
281 fn into_layer(self, service: S) -> Self::Service {
282 let (l1, l2, l3, l4, l5, l6, l7, l8, l9, l10) = self;
283 l1.into_layer((l2, l3, l4, l5, l6, l7, l8, l9, l10).into_layer(service))
284 }
285}
286
287impl<S, L1, L2, L3, L4, L5, L6, L7, L8, L9, L10, L11> Layer<S>
288 for (L1, L2, L3, L4, L5, L6, L7, L8, L9, L10, L11)
289where
290 L1: Layer<L2::Service>,
291 L2: Layer<L3::Service>,
292 L3: Layer<L4::Service>,
293 L4: Layer<L5::Service>,
294 L5: Layer<L6::Service>,
295 L6: Layer<L7::Service>,
296 L7: Layer<L8::Service>,
297 L8: Layer<L9::Service>,
298 L9: Layer<L10::Service>,
299 L10: Layer<L11::Service>,
300 L11: Layer<S>,
301{
302 type Service = L1::Service;
303
304 fn layer(&self, service: S) -> Self::Service {
305 let (l1, l2, l3, l4, l5, l6, l7, l8, l9, l10, l11) = self;
306 l1.layer((l2, l3, l4, l5, l6, l7, l8, l9, l10, l11).layer(service))
307 }
308
309 fn into_layer(self, service: S) -> Self::Service {
310 let (l1, l2, l3, l4, l5, l6, l7, l8, l9, l10, l11) = self;
311 l1.into_layer((l2, l3, l4, l5, l6, l7, l8, l9, l10, l11).into_layer(service))
312 }
313}
314
315impl<S, L1, L2, L3, L4, L5, L6, L7, L8, L9, L10, L11, L12> Layer<S>
316 for (L1, L2, L3, L4, L5, L6, L7, L8, L9, L10, L11, L12)
317where
318 L1: Layer<L2::Service>,
319 L2: Layer<L3::Service>,
320 L3: Layer<L4::Service>,
321 L4: Layer<L5::Service>,
322 L5: Layer<L6::Service>,
323 L6: Layer<L7::Service>,
324 L7: Layer<L8::Service>,
325 L8: Layer<L9::Service>,
326 L9: Layer<L10::Service>,
327 L10: Layer<L11::Service>,
328 L11: Layer<L12::Service>,
329 L12: Layer<S>,
330{
331 type Service = L1::Service;
332
333 fn layer(&self, service: S) -> Self::Service {
334 let (l1, l2, l3, l4, l5, l6, l7, l8, l9, l10, l11, l12) = self;
335 l1.layer((l2, l3, l4, l5, l6, l7, l8, l9, l10, l11, l12).layer(service))
336 }
337
338 fn into_layer(self, service: S) -> Self::Service {
339 let (l1, l2, l3, l4, l5, l6, l7, l8, l9, l10, l11, l12) = self;
340 l1.into_layer((l2, l3, l4, l5, l6, l7, l8, l9, l10, l11, l12).into_layer(service))
341 }
342}
343
344impl<S, L1, L2, L3, L4, L5, L6, L7, L8, L9, L10, L11, L12, L13> Layer<S>
345 for (L1, L2, L3, L4, L5, L6, L7, L8, L9, L10, L11, L12, L13)
346where
347 L1: Layer<L2::Service>,
348 L2: Layer<L3::Service>,
349 L3: Layer<L4::Service>,
350 L4: Layer<L5::Service>,
351 L5: Layer<L6::Service>,
352 L6: Layer<L7::Service>,
353 L7: Layer<L8::Service>,
354 L8: Layer<L9::Service>,
355 L9: Layer<L10::Service>,
356 L10: Layer<L11::Service>,
357 L11: Layer<L12::Service>,
358 L12: Layer<L13::Service>,
359 L13: Layer<S>,
360{
361 type Service = L1::Service;
362
363 fn layer(&self, service: S) -> Self::Service {
364 let (l1, l2, l3, l4, l5, l6, l7, l8, l9, l10, l11, l12, l13) = self;
365 l1.layer((l2, l3, l4, l5, l6, l7, l8, l9, l10, l11, l12, l13).layer(service))
366 }
367
368 fn into_layer(self, service: S) -> Self::Service {
369 let (l1, l2, l3, l4, l5, l6, l7, l8, l9, l10, l11, l12, l13) = self;
370 l1.into_layer((l2, l3, l4, l5, l6, l7, l8, l9, l10, l11, l12, l13).into_layer(service))
371 }
372}
373
374impl<S, L1, L2, L3, L4, L5, L6, L7, L8, L9, L10, L11, L12, L13, L14> Layer<S>
375 for (L1, L2, L3, L4, L5, L6, L7, L8, L9, L10, L11, L12, L13, L14)
376where
377 L1: Layer<L2::Service>,
378 L2: Layer<L3::Service>,
379 L3: Layer<L4::Service>,
380 L4: Layer<L5::Service>,
381 L5: Layer<L6::Service>,
382 L6: Layer<L7::Service>,
383 L7: Layer<L8::Service>,
384 L8: Layer<L9::Service>,
385 L9: Layer<L10::Service>,
386 L10: Layer<L11::Service>,
387 L11: Layer<L12::Service>,
388 L12: Layer<L13::Service>,
389 L13: Layer<L14::Service>,
390 L14: Layer<S>,
391{
392 type Service = L1::Service;
393
394 fn layer(&self, service: S) -> Self::Service {
395 let (l1, l2, l3, l4, l5, l6, l7, l8, l9, l10, l11, l12, l13, l14) = self;
396 l1.layer((l2, l3, l4, l5, l6, l7, l8, l9, l10, l11, l12, l13, l14).layer(service))
397 }
398
399 fn into_layer(self, service: S) -> Self::Service {
400 let (l1, l2, l3, l4, l5, l6, l7, l8, l9, l10, l11, l12, l13, l14) = self;
401 l1.into_layer((l2, l3, l4, l5, l6, l7, l8, l9, l10, l11, l12, l13, l14).into_layer(service))
402 }
403}
404
405#[rustfmt::skip]
406impl<S, L1, L2, L3, L4, L5, L6, L7, L8, L9, L10, L11, L12, L13, L14, L15> Layer<S>
407 for (L1, L2, L3, L4, L5, L6, L7, L8, L9, L10, L11, L12, L13, L14, L15)
408where
409 L1: Layer<L2::Service>,
410 L2: Layer<L3::Service>,
411 L3: Layer<L4::Service>,
412 L4: Layer<L5::Service>,
413 L5: Layer<L6::Service>,
414 L6: Layer<L7::Service>,
415 L7: Layer<L8::Service>,
416 L8: Layer<L9::Service>,
417 L9: Layer<L10::Service>,
418 L10: Layer<L11::Service>,
419 L11: Layer<L12::Service>,
420 L12: Layer<L13::Service>,
421 L13: Layer<L14::Service>,
422 L14: Layer<L15::Service>,
423 L15: Layer<S>,
424{
425 type Service = L1::Service;
426
427 fn layer(&self, service: S) -> Self::Service {
428 let (l1, l2, l3, l4, l5, l6, l7, l8, l9, l10, l11, l12, l13, l14, l15) = self;
429 l1.layer((l2, l3, l4, l5, l6, l7, l8, l9, l10, l11, l12, l13, l14, l15).layer(service))
430 }
431
432 fn into_layer(self, service: S) -> Self::Service {
433 let (l1, l2, l3, l4, l5, l6, l7, l8, l9, l10, l11, l12, l13, l14, l15) = self;
434 l1.into_layer((l2, l3, l4, l5, l6, l7, l8, l9, l10, l11, l12, l13, l14, l15).into_layer(service))
435 }
436}
437
438#[rustfmt::skip]
439impl<S, L1, L2, L3, L4, L5, L6, L7, L8, L9, L10, L11, L12, L13, L14, L15, L16> Layer<S>
440 for (L1, L2, L3, L4, L5, L6, L7, L8, L9, L10, L11, L12, L13, L14, L15, L16)
441where
442 L1: Layer<L2::Service>,
443 L2: Layer<L3::Service>,
444 L3: Layer<L4::Service>,
445 L4: Layer<L5::Service>,
446 L5: Layer<L6::Service>,
447 L6: Layer<L7::Service>,
448 L7: Layer<L8::Service>,
449 L8: Layer<L9::Service>,
450 L9: Layer<L10::Service>,
451 L10: Layer<L11::Service>,
452 L11: Layer<L12::Service>,
453 L12: Layer<L13::Service>,
454 L13: Layer<L14::Service>,
455 L14: Layer<L15::Service>,
456 L15: Layer<L16::Service>,
457 L16: Layer<S>,
458{
459 type Service = L1::Service;
460
461 fn layer(&self, service: S) -> Self::Service {
462 let (l1, l2, l3, l4, l5, l6, l7, l8, l9, l10, l11, l12, l13, l14, l15, l16) = self;
463 l1.layer((l2, l3, l4, l5, l6, l7, l8, l9, l10, l11, l12, l13, l14, l15, l16).layer(service))
464 }
465
466 fn into_layer(self, service: S) -> Self::Service {
467 let (l1, l2, l3, l4, l5, l6, l7, l8, l9, l10, l11, l12, l13, l14, l15, l16) = self;
468 l1.into_layer((l2, l3, l4, l5, l6, l7, l8, l9, l10, l11, l12, l13, l14, l15, l16).into_layer(service))
469 }
470}
471
472#[rustfmt::skip]
473impl<S, L1, L2, L3, L4, L5, L6, L7, L8, L9, L10, L11, L12, L13, L14, L15, L16, L17> Layer<S>
474 for (L1, L2, L3, L4, L5, L6, L7, L8, L9, L10, L11, L12, L13, L14, L15, L16, L17)
475where
476 L1: Layer<L2::Service>,
477 L2: Layer<L3::Service>,
478 L3: Layer<L4::Service>,
479 L4: Layer<L5::Service>,
480 L5: Layer<L6::Service>,
481 L6: Layer<L7::Service>,
482 L7: Layer<L8::Service>,
483 L8: Layer<L9::Service>,
484 L9: Layer<L10::Service>,
485 L10: Layer<L11::Service>,
486 L11: Layer<L12::Service>,
487 L12: Layer<L13::Service>,
488 L13: Layer<L14::Service>,
489 L14: Layer<L15::Service>,
490 L15: Layer<L16::Service>,
491 L16: Layer<L17::Service>,
492 L17: Layer<S>,
493{
494 type Service = L1::Service;
495
496 fn layer(&self, service: S) -> Self::Service {
497 let (l1, l2, l3, l4, l5, l6, l7, l8, l9, l10, l11, l12, l13, l14, l15, l16, l17) = self;
498 l1.layer((l2, l3, l4, l5, l6, l7, l8, l9, l10, l11, l12, l13, l14, l15, l16, l17).layer(service))
499 }
500
501 fn into_layer(self, service: S) -> Self::Service {
502 let (l1, l2, l3, l4, l5, l6, l7, l8, l9, l10, l11, l12, l13, l14, l15, l16, l17) = self;
503 l1.into_layer((l2, l3, l4, l5, l6, l7, l8, l9, l10, l11, l12, l13, l14, l15, l16, l17).into_layer(service))
504 }
505}
506
507#[rustfmt::skip]
508impl<S, L1, L2, L3, L4, L5, L6, L7, L8, L9, L10, L11, L12, L13, L14, L15, L16, L17, L18> Layer<S>
509 for (L1, L2, L3, L4, L5, L6, L7, L8, L9, L10, L11, L12, L13, L14, L15, L16, L17, L18)
510where
511 L1: Layer<L2::Service>,
512 L2: Layer<L3::Service>,
513 L3: Layer<L4::Service>,
514 L4: Layer<L5::Service>,
515 L5: Layer<L6::Service>,
516 L6: Layer<L7::Service>,
517 L7: Layer<L8::Service>,
518 L8: Layer<L9::Service>,
519 L9: Layer<L10::Service>,
520 L10: Layer<L11::Service>,
521 L11: Layer<L12::Service>,
522 L12: Layer<L13::Service>,
523 L13: Layer<L14::Service>,
524 L14: Layer<L15::Service>,
525 L15: Layer<L16::Service>,
526 L16: Layer<L17::Service>,
527 L17: Layer<L18::Service>,
528 L18: Layer<S>,
529{
530 type Service = L1::Service;
531
532 fn layer(&self, service: S) -> Self::Service {
533 let (l1, l2, l3, l4, l5, l6, l7, l8, l9, l10, l11, l12, l13, l14, l15, l16, l17, l18) = self;
534 l1.layer((l2, l3, l4, l5, l6, l7, l8, l9, l10, l11, l12, l13, l14, l15, l16, l17, l18).layer(service))
535 }
536
537 fn into_layer(self, service: S) -> Self::Service {
538 let (l1, l2, l3, l4, l5, l6, l7, l8, l9, l10, l11, l12, l13, l14, l15, l16, l17, l18) = self;
539 l1.into_layer((l2, l3, l4, l5, l6, l7, l8, l9, l10, l11, l12, l13, l14, l15, l16, l17, l18).into_layer(service))
540 }
541}
542
543#[rustfmt::skip]
544impl<S, L1, L2, L3, L4, L5, L6, L7, L8, L9, L10, L11, L12, L13, L14, L15, L16, L17, L18, L19> Layer<S>
545 for (L1, L2, L3, L4, L5, L6, L7, L8, L9, L10, L11, L12, L13, L14, L15, L16, L17, L18, L19)
546where
547 L1: Layer<L2::Service>,
548 L2: Layer<L3::Service>,
549 L3: Layer<L4::Service>,
550 L4: Layer<L5::Service>,
551 L5: Layer<L6::Service>,
552 L6: Layer<L7::Service>,
553 L7: Layer<L8::Service>,
554 L8: Layer<L9::Service>,
555 L9: Layer<L10::Service>,
556 L10: Layer<L11::Service>,
557 L11: Layer<L12::Service>,
558 L12: Layer<L13::Service>,
559 L13: Layer<L14::Service>,
560 L14: Layer<L15::Service>,
561 L15: Layer<L16::Service>,
562 L16: Layer<L17::Service>,
563 L17: Layer<L18::Service>,
564 L18: Layer<L19::Service>,
565 L19: Layer<S>,
566{
567 type Service = L1::Service;
568
569 fn layer(&self, service: S) -> Self::Service {
570 let (l1, l2, l3, l4, l5, l6, l7, l8, l9, l10, l11, l12, l13, l14, l15, l16, l17, l18, l19) = self;
571 l1.layer((l2, l3, l4, l5, l6, l7, l8, l9, l10, l11, l12, l13, l14, l15, l16, l17, l18, l19).layer(service))
572 }
573
574 fn into_layer(self, service: S) -> Self::Service {
575 let (l1, l2, l3, l4, l5, l6, l7, l8, l9, l10, l11, l12, l13, l14, l15, l16, l17, l18, l19) = self;
576 l1.into_layer((l2, l3, l4, l5, l6, l7, l8, l9, l10, l11, l12, l13, l14, l15, l16, l17, l18, l19).into_layer(service))
577 }
578}
579
580#[rustfmt::skip]
581impl<S, L1, L2, L3, L4, L5, L6, L7, L8, L9, L10, L11, L12, L13, L14, L15, L16, L17, L18, L19, L20> Layer<S>
582 for (L1, L2, L3, L4, L5, L6, L7, L8, L9, L10, L11, L12, L13, L14, L15, L16, L17, L18, L19, L20)
583where
584 L1: Layer<L2::Service>,
585 L2: Layer<L3::Service>,
586 L3: Layer<L4::Service>,
587 L4: Layer<L5::Service>,
588 L5: Layer<L6::Service>,
589 L6: Layer<L7::Service>,
590 L7: Layer<L8::Service>,
591 L8: Layer<L9::Service>,
592 L9: Layer<L10::Service>,
593 L10: Layer<L11::Service>,
594 L11: Layer<L12::Service>,
595 L12: Layer<L13::Service>,
596 L13: Layer<L14::Service>,
597 L14: Layer<L15::Service>,
598 L15: Layer<L16::Service>,
599 L16: Layer<L17::Service>,
600 L17: Layer<L18::Service>,
601 L18: Layer<L19::Service>,
602 L19: Layer<L20::Service>,
603 L20: Layer<S>,
604{
605 type Service = L1::Service;
606
607 fn layer(&self, service: S) -> Self::Service {
608 let (l1, l2, l3, l4, l5, l6, l7, l8, l9, l10, l11, l12, l13, l14, l15, l16, l17, l18, l19, l20) = self;
609 l1.layer((l2, l3, l4, l5, l6, l7, l8, l9, l10, l11, l12, l13, l14, l15, l16, l17, l18, l19, l20).layer(service))
610 }
611
612 fn into_layer(self, service: S) -> Self::Service {
613 let (l1, l2, l3, l4, l5, l6, l7, l8, l9, l10, l11, l12, l13, l14, l15, l16, l17, l18, l19, l20) = self;
614 l1.into_layer((l2, l3, l4, l5, l6, l7, l8, l9, l10, l11, l12, l13, l14, l15, l16, l17, l18, l19, l20).into_layer(service))
615 }
616}
617
618#[rustfmt::skip]
619impl<S, L1, L2, L3, L4, L5, L6, L7, L8, L9, L10, L11, L12, L13, L14, L15, L16, L17, L18, L19, L20, L21> Layer<S>
620 for (L1, L2, L3, L4, L5, L6, L7, L8, L9, L10, L11, L12, L13, L14, L15, L16, L17, L18, L19, L20, L21)
621where
622 L1: Layer<L2::Service>,
623 L2: Layer<L3::Service>,
624 L3: Layer<L4::Service>,
625 L4: Layer<L5::Service>,
626 L5: Layer<L6::Service>,
627 L6: Layer<L7::Service>,
628 L7: Layer<L8::Service>,
629 L8: Layer<L9::Service>,
630 L9: Layer<L10::Service>,
631 L10: Layer<L11::Service>,
632 L11: Layer<L12::Service>,
633 L12: Layer<L13::Service>,
634 L13: Layer<L14::Service>,
635 L14: Layer<L15::Service>,
636 L15: Layer<L16::Service>,
637 L16: Layer<L17::Service>,
638 L17: Layer<L18::Service>,
639 L18: Layer<L19::Service>,
640 L19: Layer<L20::Service>,
641 L20: Layer<L21::Service>,
642 L21: Layer<S>,
643{
644 type Service = L1::Service;
645
646 fn layer(&self, service: S) -> Self::Service {
647 let (l1, l2, l3, l4, l5, l6, l7, l8, l9, l10, l11, l12, l13, l14, l15, l16, l17, l18, l19, l20, l21) = self;
648 l1.layer((l2, l3, l4, l5, l6, l7, l8, l9, l10, l11, l12, l13, l14, l15, l16, l17, l18, l19, l20, l21).layer(service))
649 }
650
651 fn into_layer(self, service: S) -> Self::Service {
652 let (l1, l2, l3, l4, l5, l6, l7, l8, l9, l10, l11, l12, l13, l14, l15, l16, l17, l18, l19, l20, l21) = self;
653 l1.into_layer((l2, l3, l4, l5, l6, l7, l8, l9, l10, l11, l12, l13, l14, l15, l16, l17, l18, l19, l20, l21).into_layer(service))
654 }
655}
656
657#[rustfmt::skip]
658impl<S, L1, L2, L3, L4, L5, L6, L7, L8, L9, L10, L11, L12, L13, L14, L15, L16, L17, L18, L19, L20, L21, L22> Layer<S>
659 for (L1, L2, L3, L4, L5, L6, L7, L8, L9, L10, L11, L12, L13, L14, L15, L16, L17, L18, L19, L20, L21, L22)
660where
661 L1: Layer<L2::Service>,
662 L2: Layer<L3::Service>,
663 L3: Layer<L4::Service>,
664 L4: Layer<L5::Service>,
665 L5: Layer<L6::Service>,
666 L6: Layer<L7::Service>,
667 L7: Layer<L8::Service>,
668 L8: Layer<L9::Service>,
669 L9: Layer<L10::Service>,
670 L10: Layer<L11::Service>,
671 L11: Layer<L12::Service>,
672 L12: Layer<L13::Service>,
673 L13: Layer<L14::Service>,
674 L14: Layer<L15::Service>,
675 L15: Layer<L16::Service>,
676 L16: Layer<L17::Service>,
677 L17: Layer<L18::Service>,
678 L18: Layer<L19::Service>,
679 L19: Layer<L20::Service>,
680 L20: Layer<L21::Service>,
681 L21: Layer<L22::Service>,
682 L22: Layer<S>,
683{
684 type Service = L1::Service;
685
686 fn layer(&self, service: S) -> Self::Service {
687 let (l1, l2, l3, l4, l5, l6, l7, l8, l9, l10, l11, l12, l13, l14, l15, l16, l17, l18, l19, l20, l21, l22) = self;
688 l1.layer((l2, l3, l4, l5, l6, l7, l8, l9, l10, l11, l12, l13, l14, l15, l16, l17, l18, l19, l20, l21, l22).layer(service))
689 }
690
691 fn into_layer(self, service: S) -> Self::Service {
692 let (l1, l2, l3, l4, l5, l6, l7, l8, l9, l10, l11, l12, l13, l14, l15, l16, l17, l18, l19, l20, l21, l22) = self;
693 l1.into_layer((l2, l3, l4, l5, l6, l7, l8, l9, l10, l11, l12, l13, l14, l15, l16, l17, l18, l19, l20, l21, l22).into_layer(service))
694 }
695}
696
697#[rustfmt::skip]
698impl<S, L1, L2, L3, L4, L5, L6, L7, L8, L9, L10, L11, L12, L13, L14, L15, L16, L17, L18, L19, L20, L21, L22, L23> Layer<S>
699 for (L1, L2, L3, L4, L5, L6, L7, L8, L9, L10, L11, L12, L13, L14, L15, L16, L17, L18, L19, L20, L21, L22, L23)
700where
701 L1: Layer<L2::Service>,
702 L2: Layer<L3::Service>,
703 L3: Layer<L4::Service>,
704 L4: Layer<L5::Service>,
705 L5: Layer<L6::Service>,
706 L6: Layer<L7::Service>,
707 L7: Layer<L8::Service>,
708 L8: Layer<L9::Service>,
709 L9: Layer<L10::Service>,
710 L10: Layer<L11::Service>,
711 L11: Layer<L12::Service>,
712 L12: Layer<L13::Service>,
713 L13: Layer<L14::Service>,
714 L14: Layer<L15::Service>,
715 L15: Layer<L16::Service>,
716 L16: Layer<L17::Service>,
717 L17: Layer<L18::Service>,
718 L18: Layer<L19::Service>,
719 L19: Layer<L20::Service>,
720 L20: Layer<L21::Service>,
721 L21: Layer<L22::Service>,
722 L22: Layer<L23::Service>,
723 L23: Layer<S>,
724{
725 type Service = L1::Service;
726
727 fn layer(&self, service: S) -> Self::Service {
728 let (l1, l2, l3, l4, l5, l6, l7, l8, l9, l10, l11, l12, l13, l14, l15, l16, l17, l18, l19, l20, l21, l22, l23) = self;
729 l1.layer((l2, l3, l4, l5, l6, l7, l8, l9, l10, l11, l12, l13, l14, l15, l16, l17, l18, l19, l20, l21, l22, l23).layer(service))
730 }
731
732 fn into_layer(self, service: S) -> Self::Service {
733 let (l1, l2, l3, l4, l5, l6, l7, l8, l9, l10, l11, l12, l13, l14, l15, l16, l17, l18, l19, l20, l21, l22, l23) = self;
734 l1.into_layer((l2, l3, l4, l5, l6, l7, l8, l9, l10, l11, l12, l13, l14, l15, l16, l17, l18, l19, l20, l21, l22, l23).into_layer(service))
735 }
736}
737
738#[rustfmt::skip]
739impl<S, L1, L2, L3, L4, L5, L6, L7, L8, L9, L10, L11, L12, L13, L14, L15, L16, L17, L18, L19, L20, L21, L22, L23, L24> Layer<S>
740 for (L1, L2, L3, L4, L5, L6, L7, L8, L9, L10, L11, L12, L13, L14, L15, L16, L17, L18, L19, L20, L21, L22, L23, L24)
741where
742 L1: Layer<L2::Service>,
743 L2: Layer<L3::Service>,
744 L3: Layer<L4::Service>,
745 L4: Layer<L5::Service>,
746 L5: Layer<L6::Service>,
747 L6: Layer<L7::Service>,
748 L7: Layer<L8::Service>,
749 L8: Layer<L9::Service>,
750 L9: Layer<L10::Service>,
751 L10: Layer<L11::Service>,
752 L11: Layer<L12::Service>,
753 L12: Layer<L13::Service>,
754 L13: Layer<L14::Service>,
755 L14: Layer<L15::Service>,
756 L15: Layer<L16::Service>,
757 L16: Layer<L17::Service>,
758 L17: Layer<L18::Service>,
759 L18: Layer<L19::Service>,
760 L19: Layer<L20::Service>,
761 L20: Layer<L21::Service>,
762 L21: Layer<L22::Service>,
763 L22: Layer<L23::Service>,
764 L23: Layer<L24::Service>,
765 L24: Layer<S>,
766{
767 type Service = L1::Service;
768
769 fn layer(&self, service: S) -> Self::Service {
770 let (l1, l2, l3, l4, l5, l6, l7, l8, l9, l10, l11, l12, l13, l14, l15, l16, l17, l18, l19, l20, l21, l22, l23, l24) = self;
771 l1.layer((l2, l3, l4, l5, l6, l7, l8, l9, l10, l11, l12, l13, l14, l15, l16, l17, l18, l19, l20, l21, l22, l23, l24).layer(service))
772 }
773
774 fn into_layer(self, service: S) -> Self::Service {
775 let (l1, l2, l3, l4, l5, l6, l7, l8, l9, l10, l11, l12, l13, l14, l15, l16, l17, l18, l19, l20, l21, l22, l23, l24) = self;
776 l1.into_layer((l2, l3, l4, l5, l6, l7, l8, l9, l10, l11, l12, l13, l14, l15, l16, l17, l18, l19, l20, l21, l22, l23, l24).into_layer(service))
777 }
778}
779
780#[rustfmt::skip]
781impl<S, L1, L2, L3, L4, L5, L6, L7, L8, L9, L10, L11, L12, L13, L14, L15, L16, L17, L18, L19, L20, L21, L22, L23, L24, L25> Layer<S>
782 for (L1, L2, L3, L4, L5, L6, L7, L8, L9, L10, L11, L12, L13, L14, L15, L16, L17, L18, L19, L20, L21, L22, L23, L24, L25)
783where
784 L1: Layer<L2::Service>,
785 L2: Layer<L3::Service>,
786 L3: Layer<L4::Service>,
787 L4: Layer<L5::Service>,
788 L5: Layer<L6::Service>,
789 L6: Layer<L7::Service>,
790 L7: Layer<L8::Service>,
791 L8: Layer<L9::Service>,
792 L9: Layer<L10::Service>,
793 L10: Layer<L11::Service>,
794 L11: Layer<L12::Service>,
795 L12: Layer<L13::Service>,
796 L13: Layer<L14::Service>,
797 L14: Layer<L15::Service>,
798 L15: Layer<L16::Service>,
799 L16: Layer<L17::Service>,
800 L17: Layer<L18::Service>,
801 L18: Layer<L19::Service>,
802 L19: Layer<L20::Service>,
803 L20: Layer<L21::Service>,
804 L21: Layer<L22::Service>,
805 L22: Layer<L23::Service>,
806 L23: Layer<L24::Service>,
807 L24: Layer<L25::Service>,
808 L25: Layer<S>,
809{
810 type Service = L1::Service;
811
812 fn layer(&self, service: S) -> Self::Service {
813 let (l1, l2, l3, l4, l5, l6, l7, l8, l9, l10, l11, l12, l13, l14, l15, l16, l17, l18, l19, l20, l21, l22, l23, l24, l25) = self;
814 l1.layer((l2, l3, l4, l5, l6, l7, l8, l9, l10, l11, l12, l13, l14, l15, l16, l17, l18, l19, l20, l21, l22, l23, l24, l25).layer(service))
815 }
816
817 fn into_layer(self, service: S) -> Self::Service {
818 let (l1, l2, l3, l4, l5, l6, l7, l8, l9, l10, l11, l12, l13, l14, l15, l16, l17, l18, l19, l20, l21, l22, l23, l24, l25) = self;
819 l1.into_layer((l2, l3, l4, l5, l6, l7, l8, l9, l10, l11, l12, l13, l14, l15, l16, l17, l18, l19, l20, l21, l22, l23, l24, l25).into_layer(service))
820 }
821}
822
823mod into_error;
824#[doc(inline)]
825pub use into_error::{LayerErrorFn, LayerErrorStatic, MakeLayerError};
826
827mod hijack;
828#[doc(inline)]
829pub use hijack::{HijackLayer, HijackService};
830
831mod map_state;
832#[doc(inline)]
833pub use map_state::{MapState, MapStateLayer};
834
835mod layer_fn;
836#[doc(inline)]
837pub use layer_fn::{LayerFn, layer_fn};
838
839mod map_request;
840#[doc(inline)]
841pub use map_request::{MapRequest, MapRequestLayer};
842
843mod map_response;
844#[doc(inline)]
845pub use map_response::{MapResponse, MapResponseLayer};
846
847mod map_err;
848#[doc(inline)]
849pub use map_err::{MapErr, MapErrLayer};
850
851mod consume_err;
852#[doc(inline)]
853pub use consume_err::{ConsumeErr, ConsumeErrLayer};
854
855mod trace_err;
856#[doc(inline)]
857pub use trace_err::{TraceErr, TraceErrLayer};
858
859mod map_result;
860#[doc(inline)]
861pub use map_result::{MapResult, MapResultLayer};
862
863pub mod timeout;
864pub use timeout::{Timeout, TimeoutLayer};
865
866pub mod limit;
867pub use limit::{Limit, LimitLayer};
868
869pub mod add_extension;
870pub use add_extension::{AddExtension, AddExtensionLayer};
871
872pub mod get_extension;
873pub use get_extension::{GetExtension, GetExtensionLayer};
874
875macro_rules! impl_layer_either {
876 ($id:ident, $($param:ident),+ $(,)?) => {
877 impl<$($param),+, S> Layer<S> for crate::combinators::$id<$($param),+>
878 where
879 $($param: Layer<S>),+,
880 {
881 type Service = crate::combinators::$id<$($param::Service),+>;
882
883 fn layer(&self, inner: S) -> Self::Service {
884 match self {
885 $(
886 crate::combinators::$id::$param(layer) => crate::combinators::$id::$param(layer.layer(inner)),
887 )+
888 }
889 }
890
891 fn into_layer(self, inner: S) -> Self::Service {
892 match self {
893 $(
894 crate::combinators::$id::$param(layer) => crate::combinators::$id::$param(layer.into_layer(inner)),
895 )+
896 }
897 }
898 }
899 };
900}
901
902crate::combinators::impl_either!(impl_layer_either);