@@ -54,7 +54,7 @@ pub fn _catch(args: TokenStream, input: TokenStream) -> Result<TokenStream> {
54
54
define_vars_and_mods ! ( req, catcher, Request , Response , ErrorHandlerFuture ) ;
55
55
56
56
// Determine the number of parameters that will be passed in.
57
- let ( fn_sig , inputs) = match catch. function . sig . inputs . len ( ) {
57
+ let ( _fn_sig , inputs) = match catch. function . sig . inputs . len ( ) {
58
58
0 => ( quote ! ( fn ( ) -> _) , quote ! ( ) ) ,
59
59
1 => ( quote ! ( fn ( & #Request ) -> _) , quote ! ( #req) ) ,
60
60
_ => return Err ( catch. function . sig . inputs . span ( )
@@ -71,10 +71,22 @@ pub fn _catch(args: TokenStream, input: TokenStream) -> Result<TokenStream> {
71
71
. map ( |ty| ty. span ( ) . into ( ) )
72
72
. unwrap_or ( Span :: call_site ( ) . into ( ) ) ;
73
73
74
+ let responder_stmt = if catch. function . sig . asyncness . is_some ( ) {
75
+ quote_spanned ! { return_type_span =>
76
+ let ___responder = #catcher( #inputs) . await ;
77
+ }
78
+ } else {
79
+ quote_spanned ! { return_type_span =>
80
+ let ___responder = #catcher( #inputs) ;
81
+ }
82
+ } ;
83
+
74
84
let catcher_response = quote_spanned ! ( return_type_span => {
75
- // Emit this to force a type signature check.
76
- let #catcher: #fn_sig = #user_catcher_fn_name;
77
- let ___responder = #catcher( #inputs) ;
85
+ // TODO.async: fix this
86
+ // // Emit this to force a type signature check.
87
+ // let #catcher: #fn_sig = #user_catcher_fn_name;
88
+ let #catcher = #user_catcher_fn_name;
89
+ #responder_stmt
78
90
:: rocket:: response:: Responder :: respond_to( ___responder, #req) . await ?
79
91
} ) ;
80
92
0 commit comments