Rocket/core/lib/tests/responder_lifetime-issue-345.rs
Jeb Rosen 7c34a3a93e Make 'Fairing::on_response' and 'Responder::respond_to' async.
This is required to be able to do anything useful with the body in the
outgoing response. Request fairings do not appear to need to be async
as everything on Data that returns a future moves self and on_request only
gets &Data, but the same change in this commit should work for on_request
if desired.
2020-07-11 09:24:28 -07:00

31 lines
824 B
Rust

#![feature(proc_macro_hygiene, async_await)]
#![allow(dead_code)] // This test is only here so that we can ensure it compiles.
#[macro_use] extern crate rocket;
use rocket::State;
use rocket::response::{self, Responder};
struct SomeState;
pub struct CustomResponder<'r, R> {
responder: R,
state: &'r SomeState,
}
impl<'r, R: Responder<'r>> Responder<'r> for CustomResponder<'r, R> {
fn respond_to(self, _: &rocket::Request) -> response::ResultFuture<'r> {
unimplemented!()
}
}
#[get("/unit_state")]
fn unit_state(state: State<SomeState>) -> CustomResponder<()> {
CustomResponder { responder: (), state: state.inner() }
}
#[get("/string_state")]
fn string_state(state: State<SomeState>) -> CustomResponder<String> {
CustomResponder { responder: "".to_string(), state: state.inner() }
}