rest/middleware/
timeout.rs

1use crate::middleware::{Middleware, middleware};
2use hyper::Body;
3use std::time::Duration;
4
5/// Per-request timeout; on timeout return 504.
6pub fn timeout(duration: Duration) -> Middleware {
7    middleware(move |req, next| async move {
8        match tokio::time::timeout(duration, next.call(req)).await {
9            Ok(resp) => resp,
10            Err(_) => http::Response::builder()
11                .status(http::StatusCode::GATEWAY_TIMEOUT)
12                .body(Body::from("request timeout"))
13                .unwrap(),
14        }
15    })
16}