1use crate::error::BoxError;
2use crate::{Context, Service};
3
4use super::RequestInspector;
5
6impl<I1, StateIn, RequestIn> Service<StateIn, RequestIn> for (I1,)
7where
8 I1: RequestInspector<StateIn, RequestIn, Error: Into<BoxError>>,
9 StateIn: Clone + Send + Sync + 'static,
10 RequestIn: Send + 'static,
11{
12 type Error = BoxError;
13 type Response = (Context<I1::StateOut>, I1::RequestOut);
14
15 async fn serve(
16 &self,
17 ctx: Context<StateIn>,
18 req: RequestIn,
19 ) -> Result<Self::Response, Self::Error> {
20 self.0.inspect_request(ctx, req).await.map_err(Into::into)
21 }
22}
23
24impl<I1, I2, StateIn, RequestIn> Service<StateIn, RequestIn> for (I1, I2)
25where
26 I1: RequestInspector<StateIn, RequestIn, Error: Into<BoxError>>,
27 I2: RequestInspector<I1::StateOut, I1::RequestOut, Error: Into<BoxError>>,
28 StateIn: Clone + Send + Sync + 'static,
29 RequestIn: Send + 'static,
30{
31 type Error = BoxError;
32 type Response = (Context<I2::StateOut>, I2::RequestOut);
33
34 async fn serve(
35 &self,
36 ctx: Context<StateIn>,
37 req: RequestIn,
38 ) -> Result<Self::Response, Self::Error> {
39 let (ctx, req) = self.0.inspect_request(ctx, req).await.map_err(Into::into)?;
40 self.1.inspect_request(ctx, req).await.map_err(Into::into)
41 }
42}
43
44impl<I1, I2, I3, StateIn, RequestIn> Service<StateIn, RequestIn> for (I1, I2, I3)
45where
46 I1: RequestInspector<StateIn, RequestIn, Error: Into<BoxError>>,
47 I2: RequestInspector<I1::StateOut, I1::RequestOut, Error: Into<BoxError>>,
48 I3: RequestInspector<I2::StateOut, I2::RequestOut, Error: Into<BoxError>>,
49 StateIn: Clone + Send + Sync + 'static,
50 RequestIn: Send + 'static,
51{
52 type Error = BoxError;
53 type Response = (Context<I3::StateOut>, I3::RequestOut);
54
55 async fn serve(
56 &self,
57 ctx: Context<StateIn>,
58 req: RequestIn,
59 ) -> Result<Self::Response, Self::Error> {
60 let (ctx, req) = self.0.inspect_request(ctx, req).await.map_err(Into::into)?;
61 let (ctx, req) = self.1.inspect_request(ctx, req).await.map_err(Into::into)?;
62 self.2.inspect_request(ctx, req).await.map_err(Into::into)
63 }
64}
65
66impl<I1, I2, I3, I4, StateIn, RequestIn> Service<StateIn, RequestIn> for (I1, I2, I3, I4)
67where
68 I1: RequestInspector<StateIn, RequestIn, Error: Into<BoxError>>,
69 I2: RequestInspector<I1::StateOut, I1::RequestOut, Error: Into<BoxError>>,
70 I3: RequestInspector<I2::StateOut, I2::RequestOut, Error: Into<BoxError>>,
71 I4: RequestInspector<I3::StateOut, I3::RequestOut, Error: Into<BoxError>>,
72 StateIn: Clone + Send + Sync + 'static,
73 RequestIn: Send + 'static,
74{
75 type Error = BoxError;
76 type Response = (Context<I4::StateOut>, I4::RequestOut);
77
78 async fn serve(
79 &self,
80 ctx: Context<StateIn>,
81 req: RequestIn,
82 ) -> Result<Self::Response, Self::Error> {
83 let (ctx, req) = self.0.inspect_request(ctx, req).await.map_err(Into::into)?;
84 let (ctx, req) = self.1.inspect_request(ctx, req).await.map_err(Into::into)?;
85 let (ctx, req) = self.2.inspect_request(ctx, req).await.map_err(Into::into)?;
86 self.3.inspect_request(ctx, req).await.map_err(Into::into)
87 }
88}
89
90impl<I1, I2, I3, I4, I5, StateIn, RequestIn> Service<StateIn, RequestIn> for (I1, I2, I3, I4, I5)
91where
92 I1: RequestInspector<StateIn, RequestIn, Error: Into<BoxError>>,
93 I2: RequestInspector<I1::StateOut, I1::RequestOut, Error: Into<BoxError>>,
94 I3: RequestInspector<I2::StateOut, I2::RequestOut, Error: Into<BoxError>>,
95 I4: RequestInspector<I3::StateOut, I3::RequestOut, Error: Into<BoxError>>,
96 I5: RequestInspector<I4::StateOut, I4::RequestOut, Error: Into<BoxError>>,
97 StateIn: Clone + Send + Sync + 'static,
98 RequestIn: Send + 'static,
99{
100 type Error = BoxError;
101 type Response = (Context<I5::StateOut>, I5::RequestOut);
102
103 async fn serve(
104 &self,
105 ctx: Context<StateIn>,
106 req: RequestIn,
107 ) -> Result<Self::Response, Self::Error> {
108 let (ctx, req) = self.0.inspect_request(ctx, req).await.map_err(Into::into)?;
109 let (ctx, req) = self.1.inspect_request(ctx, req).await.map_err(Into::into)?;
110 let (ctx, req) = self.2.inspect_request(ctx, req).await.map_err(Into::into)?;
111 let (ctx, req) = self.3.inspect_request(ctx, req).await.map_err(Into::into)?;
112 self.4.inspect_request(ctx, req).await.map_err(Into::into)
113 }
114}
115
116impl<I1, I2, I3, I4, I5, I6, StateIn, RequestIn> Service<StateIn, RequestIn>
117 for (I1, I2, I3, I4, I5, I6)
118where
119 I1: RequestInspector<StateIn, RequestIn, Error: Into<BoxError>>,
120 I2: RequestInspector<I1::StateOut, I1::RequestOut, Error: Into<BoxError>>,
121 I3: RequestInspector<I2::StateOut, I2::RequestOut, Error: Into<BoxError>>,
122 I4: RequestInspector<I3::StateOut, I3::RequestOut, Error: Into<BoxError>>,
123 I5: RequestInspector<I4::StateOut, I4::RequestOut, Error: Into<BoxError>>,
124 I6: RequestInspector<I5::StateOut, I5::RequestOut, Error: Into<BoxError>>,
125 StateIn: Clone + Send + Sync + 'static,
126 RequestIn: Send + 'static,
127{
128 type Error = BoxError;
129 type Response = (Context<I6::StateOut>, I6::RequestOut);
130
131 async fn serve(
132 &self,
133 ctx: Context<StateIn>,
134 req: RequestIn,
135 ) -> Result<Self::Response, Self::Error> {
136 let (ctx, req) = self.0.inspect_request(ctx, req).await.map_err(Into::into)?;
137 let (ctx, req) = self.1.inspect_request(ctx, req).await.map_err(Into::into)?;
138 let (ctx, req) = self.2.inspect_request(ctx, req).await.map_err(Into::into)?;
139 let (ctx, req) = self.3.inspect_request(ctx, req).await.map_err(Into::into)?;
140 let (ctx, req) = self.4.inspect_request(ctx, req).await.map_err(Into::into)?;
141 self.5.inspect_request(ctx, req).await.map_err(Into::into)
142 }
143}
144
145impl<I1, I2, I3, I4, I5, I6, I7, StateIn, RequestIn> Service<StateIn, RequestIn>
146 for (I1, I2, I3, I4, I5, I6, I7)
147where
148 I1: RequestInspector<StateIn, RequestIn, Error: Into<BoxError>>,
149 I2: RequestInspector<I1::StateOut, I1::RequestOut, Error: Into<BoxError>>,
150 I3: RequestInspector<I2::StateOut, I2::RequestOut, Error: Into<BoxError>>,
151 I4: RequestInspector<I3::StateOut, I3::RequestOut, Error: Into<BoxError>>,
152 I5: RequestInspector<I4::StateOut, I4::RequestOut, Error: Into<BoxError>>,
153 I6: RequestInspector<I5::StateOut, I5::RequestOut, Error: Into<BoxError>>,
154 I7: RequestInspector<I6::StateOut, I6::RequestOut, Error: Into<BoxError>>,
155 StateIn: Clone + Send + Sync + 'static,
156 RequestIn: Send + 'static,
157{
158 type Error = BoxError;
159 type Response = (Context<I7::StateOut>, I7::RequestOut);
160
161 async fn serve(
162 &self,
163 ctx: Context<StateIn>,
164 req: RequestIn,
165 ) -> Result<Self::Response, Self::Error> {
166 let (ctx, req) = self.0.inspect_request(ctx, req).await.map_err(Into::into)?;
167 let (ctx, req) = self.1.inspect_request(ctx, req).await.map_err(Into::into)?;
168 let (ctx, req) = self.2.inspect_request(ctx, req).await.map_err(Into::into)?;
169 let (ctx, req) = self.3.inspect_request(ctx, req).await.map_err(Into::into)?;
170 let (ctx, req) = self.4.inspect_request(ctx, req).await.map_err(Into::into)?;
171 let (ctx, req) = self.5.inspect_request(ctx, req).await.map_err(Into::into)?;
172 self.6.inspect_request(ctx, req).await.map_err(Into::into)
173 }
174}
175
176impl<I1, I2, I3, I4, I5, I6, I7, I8, StateIn, RequestIn> Service<StateIn, RequestIn>
177 for (I1, I2, I3, I4, I5, I6, I7, I8)
178where
179 I1: RequestInspector<StateIn, RequestIn, Error: Into<BoxError>>,
180 I2: RequestInspector<I1::StateOut, I1::RequestOut, Error: Into<BoxError>>,
181 I3: RequestInspector<I2::StateOut, I2::RequestOut, Error: Into<BoxError>>,
182 I4: RequestInspector<I3::StateOut, I3::RequestOut, Error: Into<BoxError>>,
183 I5: RequestInspector<I4::StateOut, I4::RequestOut, Error: Into<BoxError>>,
184 I6: RequestInspector<I5::StateOut, I5::RequestOut, Error: Into<BoxError>>,
185 I7: RequestInspector<I6::StateOut, I6::RequestOut, Error: Into<BoxError>>,
186 I8: RequestInspector<I7::StateOut, I7::RequestOut, Error: Into<BoxError>>,
187 StateIn: Clone + Send + Sync + 'static,
188 RequestIn: Send + 'static,
189{
190 type Error = BoxError;
191 type Response = (Context<I8::StateOut>, I8::RequestOut);
192
193 async fn serve(
194 &self,
195 ctx: Context<StateIn>,
196 req: RequestIn,
197 ) -> Result<Self::Response, Self::Error> {
198 let (ctx, req) = self.0.inspect_request(ctx, req).await.map_err(Into::into)?;
199 let (ctx, req) = self.1.inspect_request(ctx, req).await.map_err(Into::into)?;
200 let (ctx, req) = self.2.inspect_request(ctx, req).await.map_err(Into::into)?;
201 let (ctx, req) = self.3.inspect_request(ctx, req).await.map_err(Into::into)?;
202 let (ctx, req) = self.4.inspect_request(ctx, req).await.map_err(Into::into)?;
203 let (ctx, req) = self.5.inspect_request(ctx, req).await.map_err(Into::into)?;
204 let (ctx, req) = self.6.inspect_request(ctx, req).await.map_err(Into::into)?;
205 self.7.inspect_request(ctx, req).await.map_err(Into::into)
206 }
207}
208
209impl<I1, I2, I3, I4, I5, I6, I7, I8, I9, StateIn, RequestIn> Service<StateIn, RequestIn>
210 for (I1, I2, I3, I4, I5, I6, I7, I8, I9)
211where
212 I1: RequestInspector<StateIn, RequestIn, Error: Into<BoxError>>,
213 I2: RequestInspector<I1::StateOut, I1::RequestOut, Error: Into<BoxError>>,
214 I3: RequestInspector<I2::StateOut, I2::RequestOut, Error: Into<BoxError>>,
215 I4: RequestInspector<I3::StateOut, I3::RequestOut, Error: Into<BoxError>>,
216 I5: RequestInspector<I4::StateOut, I4::RequestOut, Error: Into<BoxError>>,
217 I6: RequestInspector<I5::StateOut, I5::RequestOut, Error: Into<BoxError>>,
218 I7: RequestInspector<I6::StateOut, I6::RequestOut, Error: Into<BoxError>>,
219 I8: RequestInspector<I7::StateOut, I7::RequestOut, Error: Into<BoxError>>,
220 I9: RequestInspector<I8::StateOut, I8::RequestOut, Error: Into<BoxError>>,
221 StateIn: Clone + Send + Sync + 'static,
222 RequestIn: Send + 'static,
223{
224 type Error = BoxError;
225 type Response = (Context<I9::StateOut>, I9::RequestOut);
226
227 async fn serve(
228 &self,
229 ctx: Context<StateIn>,
230 req: RequestIn,
231 ) -> Result<Self::Response, Self::Error> {
232 let (ctx, req) = self.0.inspect_request(ctx, req).await.map_err(Into::into)?;
233 let (ctx, req) = self.1.inspect_request(ctx, req).await.map_err(Into::into)?;
234 let (ctx, req) = self.2.inspect_request(ctx, req).await.map_err(Into::into)?;
235 let (ctx, req) = self.3.inspect_request(ctx, req).await.map_err(Into::into)?;
236 let (ctx, req) = self.4.inspect_request(ctx, req).await.map_err(Into::into)?;
237 let (ctx, req) = self.5.inspect_request(ctx, req).await.map_err(Into::into)?;
238 let (ctx, req) = self.6.inspect_request(ctx, req).await.map_err(Into::into)?;
239 let (ctx, req) = self.7.inspect_request(ctx, req).await.map_err(Into::into)?;
240 self.8.inspect_request(ctx, req).await.map_err(Into::into)
241 }
242}
243
244impl<I1, I2, I3, I4, I5, I6, I7, I8, I9, I10, StateIn, RequestIn> Service<StateIn, RequestIn>
245 for (I1, I2, I3, I4, I5, I6, I7, I8, I9, I10)
246where
247 I1: RequestInspector<StateIn, RequestIn, Error: Into<BoxError>>,
248 I2: RequestInspector<I1::StateOut, I1::RequestOut, Error: Into<BoxError>>,
249 I3: RequestInspector<I2::StateOut, I2::RequestOut, Error: Into<BoxError>>,
250 I4: RequestInspector<I3::StateOut, I3::RequestOut, Error: Into<BoxError>>,
251 I5: RequestInspector<I4::StateOut, I4::RequestOut, Error: Into<BoxError>>,
252 I6: RequestInspector<I5::StateOut, I5::RequestOut, Error: Into<BoxError>>,
253 I7: RequestInspector<I6::StateOut, I6::RequestOut, Error: Into<BoxError>>,
254 I8: RequestInspector<I7::StateOut, I7::RequestOut, Error: Into<BoxError>>,
255 I9: RequestInspector<I8::StateOut, I8::RequestOut, Error: Into<BoxError>>,
256 I10: RequestInspector<I9::StateOut, I9::RequestOut, Error: Into<BoxError>>,
257 StateIn: Clone + Send + Sync + 'static,
258 RequestIn: Send + 'static,
259{
260 type Error = BoxError;
261 type Response = (Context<I10::StateOut>, I10::RequestOut);
262
263 async fn serve(
264 &self,
265 ctx: Context<StateIn>,
266 req: RequestIn,
267 ) -> Result<Self::Response, Self::Error> {
268 let (ctx, req) = self.0.inspect_request(ctx, req).await.map_err(Into::into)?;
269 let (ctx, req) = self.1.inspect_request(ctx, req).await.map_err(Into::into)?;
270 let (ctx, req) = self.2.inspect_request(ctx, req).await.map_err(Into::into)?;
271 let (ctx, req) = self.3.inspect_request(ctx, req).await.map_err(Into::into)?;
272 let (ctx, req) = self.4.inspect_request(ctx, req).await.map_err(Into::into)?;
273 let (ctx, req) = self.5.inspect_request(ctx, req).await.map_err(Into::into)?;
274 let (ctx, req) = self.6.inspect_request(ctx, req).await.map_err(Into::into)?;
275 let (ctx, req) = self.7.inspect_request(ctx, req).await.map_err(Into::into)?;
276 let (ctx, req) = self.8.inspect_request(ctx, req).await.map_err(Into::into)?;
277 self.9.inspect_request(ctx, req).await.map_err(Into::into)
278 }
279}
280
281impl<I1, I2, I3, I4, I5, I6, I7, I8, I9, I10, I11, StateIn, RequestIn> Service<StateIn, RequestIn>
282 for (I1, I2, I3, I4, I5, I6, I7, I8, I9, I10, I11)
283where
284 I1: RequestInspector<StateIn, RequestIn, Error: Into<BoxError>>,
285 I2: RequestInspector<I1::StateOut, I1::RequestOut, Error: Into<BoxError>>,
286 I3: RequestInspector<I2::StateOut, I2::RequestOut, Error: Into<BoxError>>,
287 I4: RequestInspector<I3::StateOut, I3::RequestOut, Error: Into<BoxError>>,
288 I5: RequestInspector<I4::StateOut, I4::RequestOut, Error: Into<BoxError>>,
289 I6: RequestInspector<I5::StateOut, I5::RequestOut, Error: Into<BoxError>>,
290 I7: RequestInspector<I6::StateOut, I6::RequestOut, Error: Into<BoxError>>,
291 I8: RequestInspector<I7::StateOut, I7::RequestOut, Error: Into<BoxError>>,
292 I9: RequestInspector<I8::StateOut, I8::RequestOut, Error: Into<BoxError>>,
293 I10: RequestInspector<I9::StateOut, I9::RequestOut, Error: Into<BoxError>>,
294 I11: RequestInspector<I10::StateOut, I10::RequestOut, Error: Into<BoxError>>,
295 StateIn: Clone + Send + Sync + 'static,
296 RequestIn: Send + 'static,
297{
298 type Error = BoxError;
299 type Response = (Context<I11::StateOut>, I11::RequestOut);
300
301 async fn serve(
302 &self,
303 ctx: Context<StateIn>,
304 req: RequestIn,
305 ) -> Result<Self::Response, Self::Error> {
306 let (ctx, req) = self.0.inspect_request(ctx, req).await.map_err(Into::into)?;
307 let (ctx, req) = self.1.inspect_request(ctx, req).await.map_err(Into::into)?;
308 let (ctx, req) = self.2.inspect_request(ctx, req).await.map_err(Into::into)?;
309 let (ctx, req) = self.3.inspect_request(ctx, req).await.map_err(Into::into)?;
310 let (ctx, req) = self.4.inspect_request(ctx, req).await.map_err(Into::into)?;
311 let (ctx, req) = self.5.inspect_request(ctx, req).await.map_err(Into::into)?;
312 let (ctx, req) = self.6.inspect_request(ctx, req).await.map_err(Into::into)?;
313 let (ctx, req) = self.7.inspect_request(ctx, req).await.map_err(Into::into)?;
314 let (ctx, req) = self.8.inspect_request(ctx, req).await.map_err(Into::into)?;
315 let (ctx, req) = self.9.inspect_request(ctx, req).await.map_err(Into::into)?;
316 self.10.inspect_request(ctx, req).await.map_err(Into::into)
317 }
318}
319
320impl<I1, I2, I3, I4, I5, I6, I7, I8, I9, I10, I11, I12, StateIn, RequestIn>
321 Service<StateIn, RequestIn> for (I1, I2, I3, I4, I5, I6, I7, I8, I9, I10, I11, I12)
322where
323 I1: RequestInspector<StateIn, RequestIn, Error: Into<BoxError>>,
324 I2: RequestInspector<I1::StateOut, I1::RequestOut, Error: Into<BoxError>>,
325 I3: RequestInspector<I2::StateOut, I2::RequestOut, Error: Into<BoxError>>,
326 I4: RequestInspector<I3::StateOut, I3::RequestOut, Error: Into<BoxError>>,
327 I5: RequestInspector<I4::StateOut, I4::RequestOut, Error: Into<BoxError>>,
328 I6: RequestInspector<I5::StateOut, I5::RequestOut, Error: Into<BoxError>>,
329 I7: RequestInspector<I6::StateOut, I6::RequestOut, Error: Into<BoxError>>,
330 I8: RequestInspector<I7::StateOut, I7::RequestOut, Error: Into<BoxError>>,
331 I9: RequestInspector<I8::StateOut, I8::RequestOut, Error: Into<BoxError>>,
332 I10: RequestInspector<I9::StateOut, I9::RequestOut, Error: Into<BoxError>>,
333 I11: RequestInspector<I10::StateOut, I10::RequestOut, Error: Into<BoxError>>,
334 I12: RequestInspector<I11::StateOut, I11::RequestOut, Error: Into<BoxError>>,
335 StateIn: Clone + Send + Sync + 'static,
336 RequestIn: Send + 'static,
337{
338 type Error = BoxError;
339 type Response = (Context<I12::StateOut>, I12::RequestOut);
340
341 async fn serve(
342 &self,
343 ctx: Context<StateIn>,
344 req: RequestIn,
345 ) -> Result<Self::Response, Self::Error> {
346 let (ctx, req) = self.0.inspect_request(ctx, req).await.map_err(Into::into)?;
347 let (ctx, req) = self.1.inspect_request(ctx, req).await.map_err(Into::into)?;
348 let (ctx, req) = self.2.inspect_request(ctx, req).await.map_err(Into::into)?;
349 let (ctx, req) = self.3.inspect_request(ctx, req).await.map_err(Into::into)?;
350 let (ctx, req) = self.4.inspect_request(ctx, req).await.map_err(Into::into)?;
351 let (ctx, req) = self.5.inspect_request(ctx, req).await.map_err(Into::into)?;
352 let (ctx, req) = self.6.inspect_request(ctx, req).await.map_err(Into::into)?;
353 let (ctx, req) = self.7.inspect_request(ctx, req).await.map_err(Into::into)?;
354 let (ctx, req) = self.8.inspect_request(ctx, req).await.map_err(Into::into)?;
355 let (ctx, req) = self.9.inspect_request(ctx, req).await.map_err(Into::into)?;
356 let (ctx, req) = self
357 .10
358 .inspect_request(ctx, req)
359 .await
360 .map_err(Into::into)?;
361 self.11.inspect_request(ctx, req).await.map_err(Into::into)
362 }
363}