[−][src]Function roa_core::join_all
pub fn join_all<S: State>(
middlewares: Vec<Arc<dyn Middleware<S>>>
) -> impl Middleware<S>
Join all middlewares in a vector.
All middlewares would be composed and executed in a stack-like manner.
Example
use roa_core::{join_all, App, Middleware, Next}; use async_std::task::spawn; use futures::lock::Mutex; use http::StatusCode; use std::sync::Arc; #[tokio::test] async fn middleware_order() -> Result<(), Box<dyn std::error::Error>> { let vector = Arc::new(Mutex::new(Vec::new())); let mut middlewares = Vec::<Arc<dyn Middleware<()>>>::new(); for i in 0..100 { let vec = vector.clone(); middlewares.push(Arc::new(move |_ctx, next: Next| { let vec = vec.clone(); async move { vec.lock().await.push(i); next().await?; vec.lock().await.push(i); Ok(()) } })); } let (addr, server) = App::new(()).gate(join_all(middlewares)).run_local()?; spawn(server); let resp = reqwest::get(&format!("http://{}", addr)).await?; assert_eq!(StatusCode::OK, resp.status()); for i in 0..100 { assert_eq!(i, vector.lock().await[i]); assert_eq!(i, vector.lock().await[199 - i]); } Ok(()) }