thruster_async_await/
lib.rs1use std::io;
2use std::future::Future;
3
4use thruster_core::context::Context;
5use thruster_core::request::{RequestWithParams};
6use thruster_core::route_parser::{MatchedRoute};
7#[cfg(feature = "thruster_error_handling")]
8use thruster_core::errors::Error;
9
10pub fn resolve<R: RequestWithParams, T: 'static + Context + Send>(context_generator: fn(R) -> T, mut request: R, matched_route: MatchedRoute<T>) -> impl Future<Output=Result<T::Response, io::Error>> + Send {
11 request.set_params(matched_route.params);
12
13 let context = (context_generator)(request);
14
15 let copy = matched_route.middleware.clone();
16 async move {
17 let ctx = copy.run(context).await;
18
19 #[cfg(feature = "thruster_error_handling")]
20 let ctx = match ctx {
21 Ok(val) => val,
22 Err(e) => {
23 e.build_context()
24 }
25 };
26
27 Ok(ctx.get_response())
28 }
29}