1
0
mirror of https://github.com/fafhrd91/actix-web synced 2025-03-11 18:52:57 +01:00

Simplify handler factory macro (#2086)

This commit is contained in:
Ibraheem Ahmed 2021-03-19 12:30:53 -04:00 committed by GitHub
parent 9488757c29
commit 8d9de76826
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -28,17 +28,6 @@ where
fn call(&self, param: T) -> R; fn call(&self, param: T) -> R;
} }
impl<F, R> Handler<(), R> for F
where
F: Fn() -> R + Clone + 'static,
R: Future,
R::Output: Responder,
{
fn call(&self, _: ()) -> R {
(self)()
}
}
#[doc(hidden)] #[doc(hidden)]
/// Extract arguments from request, run factory function and make response. /// Extract arguments from request, run factory function and make response.
pub struct HandlerService<F, T, R> pub struct HandlerService<F, T, R>
@ -177,30 +166,29 @@ where
} }
/// FromRequest trait impl for tuples /// FromRequest trait impl for tuples
macro_rules! factory_tuple ({ $(($n:tt, $T:ident)),+} => { macro_rules! factory_tuple ({ $($param:ident)* } => {
impl<Func, $($T,)+ Res> Handler<($($T,)+), Res> for Func impl<Func, $($param,)* Res> Handler<($($param,)*), Res> for Func
where Func: Fn($($T,)+) -> Res + Clone + 'static, where Func: Fn($($param),*) -> Res + Clone + 'static,
Res: Future, Res: Future,
Res::Output: Responder, Res::Output: Responder,
{ {
fn call(&self, param: ($($T,)+)) -> Res { #[allow(non_snake_case)]
(self)($(param.$n,)+) fn call(&self, ($($param,)*): ($($param,)*)) -> Res {
(self)($($param,)*)
} }
} }
}); });
#[rustfmt::skip] factory_tuple! {}
mod m { factory_tuple! { A }
use super::*; factory_tuple! { A B }
factory_tuple! { A B C }
factory_tuple!((0, A)); factory_tuple! { A B C D }
factory_tuple!((0, A), (1, B)); factory_tuple! { A B C D E }
factory_tuple!((0, A), (1, B), (2, C)); factory_tuple! { A B C D E F }
factory_tuple!((0, A), (1, B), (2, C), (3, D)); factory_tuple! { A B C D E F G }
factory_tuple!((0, A), (1, B), (2, C), (3, D), (4, E)); factory_tuple! { A B C D E F G H }
factory_tuple!((0, A), (1, B), (2, C), (3, D), (4, E), (5, F)); factory_tuple! { A B C D E F G H I }
factory_tuple!((0, A), (1, B), (2, C), (3, D), (4, E), (5, F), (6, G)); factory_tuple! { A B C D E F G H I J }
factory_tuple!((0, A), (1, B), (2, C), (3, D), (4, E), (5, F), (6, G), (7, H)); factory_tuple! { A B C D E F G H I J K }
factory_tuple!((0, A), (1, B), (2, C), (3, D), (4, E), (5, F), (6, G), (7, H), (8, I)); factory_tuple! { A B C D E F G H I J K L }
factory_tuple!((0, A), (1, B), (2, C), (3, D), (4, E), (5, F), (6, G), (7, H), (8, I), (9, J));
}