Module surf::middleware [−][src]
Middleware types
Examples
use surf::middleware::{Next, Middleware}; use surf::{Client, Request, Response, Result}; use std::time; use std::sync::Arc; /// Log each request's duration #[derive(Debug)] pub struct Logger; #[surf::utils::async_trait] impl Middleware for Logger { async fn handle( &self, req: Request, client: Client, next: Next<'_>, ) -> Result<Response> { println!("sending request to {}", req.url()); let now = time::Instant::now(); let res = next.run(req, client).await?; println!("request completed ({:?})", now.elapsed()); Ok(res) } }
Middleware
can also be instantiated using a free function thanks to some convenient trait
implementations.
use futures_util::future::BoxFuture; use surf::middleware::{Next, Middleware}; use surf::{Client, Request, Response, Result}; use std::time; use std::sync::Arc; fn logger<'a>(req: Request, client: Client, next: Next<'a>) -> BoxFuture<'a, Result<Response>> { Box::pin(async move { println!("sending request to {}", req.url()); let now = time::Instant::now(); let res = next.run(req, client).await?; println!("request completed ({:?})", now.elapsed()); Ok(res) }) }
Structs
Logger | Log each request’s duration. |
Next | The remainder of a middleware chain, including the endpoint. |
Redirect | A middleware which attempts to follow HTTP redirects. |
Traits
Middleware | Middleware that wraps around remaining middleware chain. |