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