rama_core/inspect/
chain.rs

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}