@@ -187,7 +187,31 @@ impl<T: Serialize> IntoResponse for Json<T> {
187187struct Query < T > ( pub T ) ;
188188
189189/// An API response type.
190- type Response < T > = std:: result:: Result < ( StatusCode , Json < T > ) , Error > ;
190+ trait Response < T > : IntoResponse { }
191+
192+ /// Implements [`Response`] for types with various tuple lengths.
193+ macro_rules! impl_response {
194+ ( $( $ty: ident) ,* $( , ) ? ) => {
195+ // Always require an explicit status code in `Ok` responses so the most appropriate
196+ // successful status code is more likely to be considered each time.
197+ impl <R , $( $ty, ) * > Response <R > for std:: result:: Result <( StatusCode , $( $ty, ) * Json <R >) , Error >
198+ where
199+ std:: result:: Result <( StatusCode , $( $ty, ) * Json <R >) , Error >: IntoResponse ,
200+ {
201+ }
202+ }
203+ }
204+
205+ impl_response ! ( ) ;
206+ impl_response ! ( T1 ) ;
207+ impl_response ! ( T1 , T2 ) ;
208+ impl_response ! ( T1 , T2 , T3 ) ;
209+ impl_response ! ( T1 , T2 , T3 , T4 ) ;
210+ impl_response ! ( T1 , T2 , T3 , T4 , T5 ) ;
211+ impl_response ! ( T1 , T2 , T3 , T4 , T5 , T6 ) ;
212+ impl_response ! ( T1 , T2 , T3 , T4 , T5 , T6 , T7 ) ;
213+ impl_response ! ( T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 ) ;
214+ impl_response ! ( T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 ) ;
191215
192216/// Routes a request to an API endpoint.
193217pub ( super ) async fn handle ( request : Request ) -> axum:: response:: Response {
0 commit comments