Module surf::middleware [−][src]
Expand description
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
Log each request’s duration.
The remainder of a middleware chain, including the endpoint.
A middleware which attempts to follow HTTP redirects.
Traits
Middleware that wraps around remaining middleware chain.