1 use crate::Layer;
2 
3 impl<S> Layer<S> for () {
4     type Service = S;
5 
layer(&self, service: S) -> Self::Service6     fn layer(&self, service: S) -> Self::Service {
7         service
8     }
9 }
10 
11 impl<S, L1> Layer<S> for (L1,)
12 where
13     L1: Layer<S>,
14 {
15     type Service = L1::Service;
16 
layer(&self, service: S) -> Self::Service17     fn layer(&self, service: S) -> Self::Service {
18         let (l1,) = self;
19         l1.layer(service)
20     }
21 }
22 
23 impl<S, L1, L2> Layer<S> for (L1, L2)
24 where
25     L1: Layer<L2::Service>,
26     L2: Layer<S>,
27 {
28     type Service = L1::Service;
29 
layer(&self, service: S) -> Self::Service30     fn layer(&self, service: S) -> Self::Service {
31         let (l1, l2) = self;
32         l1.layer(l2.layer(service))
33     }
34 }
35 
36 impl<S, L1, L2, L3> Layer<S> for (L1, L2, L3)
37 where
38     L1: Layer<L2::Service>,
39     L2: Layer<L3::Service>,
40     L3: Layer<S>,
41 {
42     type Service = L1::Service;
43 
layer(&self, service: S) -> Self::Service44     fn layer(&self, service: S) -> Self::Service {
45         let (l1, l2, l3) = self;
46         l1.layer((l2, l3).layer(service))
47     }
48 }
49 
50 impl<S, L1, L2, L3, L4> Layer<S> for (L1, L2, L3, L4)
51 where
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 
layer(&self, service: S) -> Self::Service59     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 
65 impl<S, L1, L2, L3, L4, L5> Layer<S> for (L1, L2, L3, L4, L5)
66 where
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 
layer(&self, service: S) -> Self::Service75     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 
81 impl<S, L1, L2, L3, L4, L5, L6> Layer<S> for (L1, L2, L3, L4, L5, L6)
82 where
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 
layer(&self, service: S) -> Self::Service92     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 
98 impl<S, L1, L2, L3, L4, L5, L6, L7> Layer<S> for (L1, L2, L3, L4, L5, L6, L7)
99 where
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 
layer(&self, service: S) -> Self::Service110     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 
116 impl<S, L1, L2, L3, L4, L5, L6, L7, L8> Layer<S> for (L1, L2, L3, L4, L5, L6, L7, L8)
117 where
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 
layer(&self, service: S) -> Self::Service129     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 
135 impl<S, L1, L2, L3, L4, L5, L6, L7, L8, L9> Layer<S> for (L1, L2, L3, L4, L5, L6, L7, L8, L9)
136 where
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 
layer(&self, service: S) -> Self::Service149     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 
155 impl<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)
157 where
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 
layer(&self, service: S) -> Self::Service171     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 
177 impl<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)
179 where
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 
layer(&self, service: S) -> Self::Service194     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 
200 impl<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)
202 where
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 
layer(&self, service: S) -> Self::Service218     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 
224 impl<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)
226 where
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 
layer(&self, service: S) -> Self::Service243     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 
249 impl<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)
251 where
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 
layer(&self, service: S) -> Self::Service269     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]
276 impl<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)
278 where
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 
layer(&self, service: S) -> Self::Service297     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]
304 impl<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)
306 where
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 
layer(&self, service: S) -> Self::Service326     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 }
331