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}