mirror of https://github.com/rwf2/Rocket.git
Make references to core types absolute in codegen.
Prior to this commit, codegen emitted tokens containing bare types like 'Result' and 'Box' as well as presumed imported variants such as 'None' and 'Ok'. However, users are free to shadow these, and if they do, the generated code will fail to compile, or worse, be incorrect. To avoid this, this commit makes all references to these core types and imports absolute.
This commit is contained in:
parent
71b888c2fa
commit
8696dd94af
|
@ -51,7 +51,7 @@ pub fn _catch(args: TokenStream, input: TokenStream) -> Result<TokenStream> {
|
||||||
let status_code = status.0.code;
|
let status_code = status.0.code;
|
||||||
|
|
||||||
// Variables names we'll use and reuse.
|
// Variables names we'll use and reuse.
|
||||||
define_vars_and_mods!(req, catcher, Request, Response, ErrorHandlerFuture);
|
define_vars_and_mods!(req, catcher, _Box, Request, Response, ErrorHandlerFuture);
|
||||||
|
|
||||||
// Determine the number of parameters that will be passed in.
|
// Determine the number of parameters that will be passed in.
|
||||||
let (_fn_sig, inputs) = match catch.function.sig.inputs.len() {
|
let (_fn_sig, inputs) = match catch.function.sig.inputs.len() {
|
||||||
|
@ -97,7 +97,7 @@ pub fn _catch(args: TokenStream, input: TokenStream) -> Result<TokenStream> {
|
||||||
/// Rocket code generated wrapping catch function.
|
/// Rocket code generated wrapping catch function.
|
||||||
#[doc(hidden)]
|
#[doc(hidden)]
|
||||||
#vis fn #generated_fn_name<'_b>(#req: &'_b #Request) -> #ErrorHandlerFuture<'_b> {
|
#vis fn #generated_fn_name<'_b>(#req: &'_b #Request) -> #ErrorHandlerFuture<'_b> {
|
||||||
Box::pin(async move {
|
#_Box::pin(async move {
|
||||||
let __response = #catcher_response;
|
let __response = #catcher_response;
|
||||||
#Response::build()
|
#Response::build()
|
||||||
.status(#status)
|
.status(#status)
|
||||||
|
|
|
@ -413,7 +413,7 @@ fn codegen_route(route: Route) -> Result<TokenStream> {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Gather everything we need.
|
// Gather everything we need.
|
||||||
define_vars_and_mods!(req, data, Request, Data, StaticRouteInfo, HandlerFuture);
|
define_vars_and_mods!(req, data, _Box, Request, Data, StaticRouteInfo, HandlerFuture);
|
||||||
let (vis, user_handler_fn) = (&route.function.vis, &route.function);
|
let (vis, user_handler_fn) = (&route.function.vis, &route.function);
|
||||||
let user_handler_fn_name = &user_handler_fn.sig.ident;
|
let user_handler_fn_name = &user_handler_fn.sig.ident;
|
||||||
let generated_fn_name = user_handler_fn_name.prepend(ROUTE_FN_PREFIX);
|
let generated_fn_name = user_handler_fn_name.prepend(ROUTE_FN_PREFIX);
|
||||||
|
@ -435,7 +435,7 @@ fn codegen_route(route: Route) -> Result<TokenStream> {
|
||||||
#req: &'_b #Request,
|
#req: &'_b #Request,
|
||||||
#data: #Data
|
#data: #Data
|
||||||
) -> #HandlerFuture<'_b> {
|
) -> #HandlerFuture<'_b> {
|
||||||
Box::pin(async move {
|
#_Box::pin(async move {
|
||||||
#(#req_guard_definitions)*
|
#(#req_guard_definitions)*
|
||||||
#(#parameter_definitions)*
|
#(#parameter_definitions)*
|
||||||
#data_stmt
|
#data_stmt
|
||||||
|
|
|
@ -38,7 +38,8 @@ pub fn derive_from_form_value(input: TokenStream) -> TokenStream {
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
.try_map_enum(null_enum_mapper)
|
.try_map_enum(null_enum_mapper)
|
||||||
.try_map_variant(move |_, variant| {
|
.try_map_variant(|_, variant| {
|
||||||
|
define_vars_and_mods!(_Ok);
|
||||||
let variant_str = Form::from_attrs("form", &variant.attrs)
|
let variant_str = Form::from_attrs("form", &variant.attrs)
|
||||||
.unwrap_or_else(|| Ok(Form { value: variant.ident.to_string() }))?
|
.unwrap_or_else(|| Ok(Form { value: variant.ident.to_string() }))?
|
||||||
.value;
|
.value;
|
||||||
|
|
|
@ -40,7 +40,7 @@ pub fn derive_responder(input: TokenStream) -> TokenStream {
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
.try_map_fields(|_, fields| {
|
.try_map_fields(|_, fields| {
|
||||||
define_vars_and_mods!(_Ok);
|
define_vars_and_mods!(_Ok, _Box);
|
||||||
fn set_header_tokens<T: ToTokens + Spanned>(item: T) -> TokenStream2 {
|
fn set_header_tokens<T: ToTokens + Spanned>(item: T) -> TokenStream2 {
|
||||||
quote_spanned!(item.span().into() => __res.set_header(#item);)
|
quote_spanned!(item.span().into() => __res.set_header(#item);)
|
||||||
}
|
}
|
||||||
|
@ -73,12 +73,12 @@ pub fn derive_responder(input: TokenStream) -> TokenStream {
|
||||||
});
|
});
|
||||||
|
|
||||||
Ok(quote! {
|
Ok(quote! {
|
||||||
Box::pin(async move {
|
#_Box::pin(async move {
|
||||||
#responder
|
#responder
|
||||||
#(#headers)*
|
#(#headers)*
|
||||||
#content_type
|
#content_type
|
||||||
#status
|
#status
|
||||||
Ok(__res)
|
#_Ok(__res)
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
|
@ -97,6 +97,13 @@ vars_and_mods! {
|
||||||
SmallVec => rocket::http::private::SmallVec,
|
SmallVec => rocket::http::private::SmallVec,
|
||||||
HandlerFuture => rocket::handler::HandlerFuture,
|
HandlerFuture => rocket::handler::HandlerFuture,
|
||||||
ErrorHandlerFuture => rocket::handler::ErrorHandlerFuture,
|
ErrorHandlerFuture => rocket::handler::ErrorHandlerFuture,
|
||||||
|
_Option => ::std::option::Option,
|
||||||
|
_Result => ::std::result::Result,
|
||||||
|
_Some => ::std::option::Option::Some,
|
||||||
|
_None => ::std::option::Option::None,
|
||||||
|
_Ok => ::std::result::Result::Ok,
|
||||||
|
_Err => ::std::result::Result::Err,
|
||||||
|
_Box => ::std::boxed::Box,
|
||||||
}
|
}
|
||||||
|
|
||||||
macro_rules! define_vars_and_mods {
|
macro_rules! define_vars_and_mods {
|
||||||
|
|
Loading…
Reference in New Issue