Skip to content

Commit 99bba53

Browse files
committed
Update codegen with many of the new changes
1 parent 04ae827 commit 99bba53

File tree

6 files changed

+29
-9
lines changed

6 files changed

+29
-9
lines changed

core/codegen/src/attribute/route/mod.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -116,7 +116,7 @@ fn query_decls(route: &Route) -> Option<TokenStream> {
116116
let __e = #resolve_error!(__e);
117117
::rocket::trace::info!(
118118
target: concat!("rocket::codegen::route::", module_path!()),
119-
error_type = __e.name(),
119+
error_type = __e.name,
120120
"Forwarding error"
121121
);
122122

core/codegen/src/derive/responder.rs

+21-4
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,9 @@ pub fn derive_responder(input: proc_macro::TokenStream) -> TokenStream {
6565
)
6666
.inner_mapper(MapperBuild::new()
6767
.with_output(|_, output| quote! {
68-
fn respond_to(self, __req: &'r #Request<'_>) -> #_response::Result<'o> {
68+
fn respond_to(self, __req: &'r #Request<'_>)
69+
-> #_response::Outcome<'o, Self::Error>
70+
{
6971
#output
7072
}
7173
})
@@ -80,9 +82,9 @@ pub fn derive_responder(input: proc_macro::TokenStream) -> TokenStream {
8082
let responder = fields.iter().next().map(|f| {
8183
let (accessor, ty) = (f.accessor(), f.ty.with_stripped_lifetimes());
8284
quote_spanned! { f.span() =>
83-
let mut __res = <#ty as #_response::Responder>::respond_to(
85+
let mut __res = #try_outcome!(<#ty as #_response::Responder>::respond_to(
8486
#accessor, __req
85-
)?;
87+
));
8688
}
8789
}).expect("have at least one field");
8890

@@ -106,7 +108,22 @@ pub fn derive_responder(input: proc_macro::TokenStream) -> TokenStream {
106108
#(#headers)*
107109
#content_type
108110
#status
109-
#_Ok(__res)
111+
#Outcome::Success(__res)
112+
})
113+
})
114+
)
115+
// TODO: What's the proper way to do this?
116+
.inner_mapper(MapperBuild::new()
117+
.with_output(|_, output| quote! {
118+
type Error = #output;
119+
})
120+
.try_struct_map(|_, item| {
121+
let responder = item.fields.iter().next().map(|f| {
122+
&f.ty
123+
}).expect("have at least one field");
124+
125+
Ok(quote! {
126+
<#responder as #_response::Responder<'r, 'o>>::Error
110127
})
111128
})
112129
)

core/codegen/src/exports.rs

+1
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,7 @@ define_exported_paths! {
8888
_ExitCode => ::std::process::ExitCode,
8989
_trace => ::rocket::trace,
9090
display_hack => ::rocket::error::display_hack,
91+
try_outcome => ::rocket::outcome::try_outcome,
9192
BorrowMut => ::std::borrow::BorrowMut,
9293
Outcome => ::rocket::outcome::Outcome,
9394
FromForm => ::rocket::form::FromForm,

core/lib/Cargo.toml

+1
Original file line numberDiff line numberDiff line change
@@ -129,6 +129,7 @@ optional = true
129129

130130
[dependencies.s2n-quic-h3]
131131
git = "https://github.com/SergioBenitez/s2n-quic-h3.git"
132+
rev = "865fd25"
132133
optional = true
133134

134135
[target.'cfg(unix)'.dependencies]

core/lib/tests/panic-handling.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
#[macro_use] extern crate rocket;
22

3-
use rocket::catcher::ErasedError;
3+
use rocket::catcher::TypedError;
44
use rocket::{Request, Rocket, Route, Catcher, Build, route, catcher};
55
use rocket::data::Data;
66
use rocket::http::{Method, Status};
@@ -74,7 +74,7 @@ fn catches_early_route_panic() {
7474

7575
#[test]
7676
fn catches_early_catcher_panic() {
77-
fn pre_future_catcher<'r>(_: Status, _: &'r Request<'_>, _: ErasedError<'r>)
77+
fn pre_future_catcher<'r>(_: Status, _: &'r Request<'_>, _: Option<&'r dyn TypedError<'r>>)
7878
-> catcher::BoxFuture<'r>
7979
{
8080
panic!("a panicking pre-future catcher")

core/lib/tests/responder_lifetime-issue-345.rs

+3-2
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
#[macro_use] extern crate rocket;
44

55
use rocket::{Request, State};
6-
use rocket::response::{Responder, Result};
6+
use rocket::response::{Responder, Outcome};
77

88
struct SomeState;
99

@@ -13,7 +13,8 @@ pub struct CustomResponder<'r, R> {
1313
}
1414

1515
impl<'r, 'o: 'r, R: Responder<'r, 'o>> Responder<'r, 'o> for CustomResponder<'r, R> {
16-
fn respond_to(self, req: &'r Request<'_>) -> Result<'o> {
16+
type Error = <R as Responder>::Error;
17+
fn respond_to(self, req: &'r Request<'_>) -> Outcome<'o, Self::Error> {
1718
self.responder.respond_to(req)
1819
}
1920
}

0 commit comments

Comments
 (0)