@@ -41,7 +41,7 @@ fn query_decls(route: &Route) -> Option<TokenStream> {
41
41
}
42
42
43
43
define_spanned_export ! ( Span :: call_site( ) =>
44
- __req, __data, _form, Outcome , _Ok, _Err, _Some, _None, Status
44
+ __req, __data, _form, Outcome , _Ok, _Err, _Some, _None, Status , resolve_error
45
45
) ;
46
46
47
47
// Record all of the static parameters for later filtering.
@@ -108,13 +108,13 @@ fn query_decls(route: &Route) -> Option<TokenStream> {
108
108
:: rocket:: trace:: span_info!(
109
109
"codegen" ,
110
110
"query string failed to match route declaration" =>
111
- { for _err in __e { :: rocket:: trace:: info!(
111
+ { for _err in __e. iter ( ) { :: rocket:: trace:: info!(
112
112
target: concat!( "rocket::codegen::route::" , module_path!( ) ) ,
113
113
"{_err}"
114
114
) ; } }
115
115
) ;
116
116
117
- return #Outcome :: Forward ( ( #__data, #Status :: UnprocessableEntity ) ) ;
117
+ return #Outcome :: Forward ( ( #__data, #Status :: UnprocessableEntity , #resolve_error! ( __e ) ) ) ;
118
118
}
119
119
120
120
( #( #ident. unwrap( ) ) , * )
@@ -125,7 +125,7 @@ fn query_decls(route: &Route) -> Option<TokenStream> {
125
125
fn request_guard_decl ( guard : & Guard ) -> TokenStream {
126
126
let ( ident, ty) = ( guard. fn_ident . rocketized ( ) , & guard. ty ) ;
127
127
define_spanned_export ! ( ty. span( ) =>
128
- __req, __data, _request, display_hack, FromRequest , Outcome , ErrorResolver , ErrorDefault
128
+ __req, __data, _request, display_hack, FromRequest , Outcome , resolve_error
129
129
) ;
130
130
131
131
quote_spanned ! { ty. span( ) =>
@@ -141,7 +141,7 @@ fn request_guard_decl(guard: &Guard) -> TokenStream {
141
141
"request guard forwarding"
142
142
) ;
143
143
144
- return #Outcome :: Forward ( ( #__data, __e) ) ;
144
+ return #Outcome :: Forward ( ( #__data, __e, #resolve_error! ( ) ) ) ;
145
145
} ,
146
146
#[ allow( unreachable_code) ]
147
147
#Outcome :: Error ( ( __c, __e) ) => {
@@ -154,9 +154,7 @@ fn request_guard_decl(guard: &Guard) -> TokenStream {
154
154
"request guard failed"
155
155
) ;
156
156
157
- #[ allow( unused) ]
158
- use #ErrorDefault ;
159
- return #Outcome :: Error ( ( __c, #ErrorResolver :: new( __e) . cast( ) ) ) ;
157
+ return #Outcome :: Error ( ( __c, #resolve_error!( __e) ) ) ;
160
158
}
161
159
} ;
162
160
}
@@ -166,7 +164,7 @@ fn param_guard_decl(guard: &Guard) -> TokenStream {
166
164
let ( i, name, ty) = ( guard. index , & guard. name , & guard. ty ) ;
167
165
define_spanned_export ! ( ty. span( ) =>
168
166
__req, __data, _None, _Some, _Ok, _Err,
169
- Outcome , FromSegments , FromParam , Status , display_hack
167
+ Outcome , FromSegments , FromParam , Status , display_hack, resolve_error
170
168
) ;
171
169
172
170
// Returned when a dynamic parameter fails to parse.
@@ -176,11 +174,12 @@ fn param_guard_decl(guard: &Guard) -> TokenStream {
176
174
target: concat!( "rocket::codegen::route::" , module_path!( ) ) ,
177
175
parameter = #name,
178
176
type_name = stringify!( #ty) ,
179
- reason = %#display_hack!( __error) ,
177
+ error_ty = std:: any:: type_name_of_val( & __error) ,
178
+ reason = %#display_hack!( & __error) ,
180
179
"path guard forwarding"
181
180
) ;
182
181
183
- #Outcome :: Forward ( ( #__data, #Status :: UnprocessableEntity ) )
182
+ #Outcome :: Forward ( ( #__data, #Status :: UnprocessableEntity , #resolve_error! ( __error ) ) )
184
183
} ) ;
185
184
186
185
// All dynamic parameters should be found if this function is being called;
@@ -202,7 +201,7 @@ fn param_guard_decl(guard: &Guard) -> TokenStream {
202
201
#i
203
202
) ;
204
203
205
- return #Outcome :: Forward ( ( #__data, #Status :: InternalServerError ) ) ;
204
+ return #Outcome :: Forward ( ( #__data, #Status :: InternalServerError , #resolve_error! ( ) ) ) ;
206
205
}
207
206
}
208
207
} ,
@@ -221,7 +220,7 @@ fn param_guard_decl(guard: &Guard) -> TokenStream {
221
220
222
221
fn data_guard_decl ( guard : & Guard ) -> TokenStream {
223
222
let ( ident, ty) = ( guard. fn_ident . rocketized ( ) , & guard. ty ) ;
224
- define_spanned_export ! ( ty. span( ) => __req, __data, display_hack, FromData , Outcome , ErrorResolver , ErrorDefault ) ;
223
+ define_spanned_export ! ( ty. span( ) => __req, __data, display_hack, FromData , Outcome , resolve_error ) ;
225
224
226
225
quote_spanned ! { ty. span( ) =>
227
226
let #ident: #ty = match <#ty as #FromData >:: from_data( #__req, #__data) . await {
@@ -236,7 +235,7 @@ fn data_guard_decl(guard: &Guard) -> TokenStream {
236
235
"data guard forwarding"
237
236
) ;
238
237
239
- return #Outcome :: Forward ( ( __d, __e) ) ;
238
+ return #Outcome :: Forward ( ( __d, __e, #resolve_error! ( ) ) ) ;
240
239
}
241
240
#[ allow( unreachable_code) ]
242
241
#Outcome :: Error ( ( __c, __e) ) => {
@@ -249,9 +248,7 @@ fn data_guard_decl(guard: &Guard) -> TokenStream {
249
248
"data guard failed"
250
249
) ;
251
250
252
- #[ allow( unused) ]
253
- use #ErrorDefault ;
254
- return #Outcome :: Error ( ( __c, #ErrorResolver :: new( __e) . cast( ) ) ) ;
251
+ return #Outcome :: Error ( ( __c, #resolve_error!( __e) ) ) ;
255
252
}
256
253
} ;
257
254
}
0 commit comments