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}