Struct tower_http::timeout::TimeoutBody
source · pub struct TimeoutBody<B> { /* private fields */ }
Available on crate feature
timeout
only.Expand description
Middleware that applies a timeout to request and response bodies.
Wrapper around a http_body::Body
to time out if data is not ready within the specified duration.
Bodies must produce data at most within the specified timeout. If the body does not produce a requested data frame within the timeout period, it will return an error.
Differences from Timeout
Timeout
applies a timeout to the request future, not body.
That timeout is not reset when bytes are handled, whether the request is active or not.
Bodies are handled asynchronously outside of the tower stack’s future and thus needs an additional timeout.
This middleware will return a TimeoutError
.
Example
use http::{Request, Response};
use hyper::Body;
use std::time::Duration;
use tower::ServiceBuilder;
use tower_http::timeout::RequestBodyTimeoutLayer;
async fn handle(_: Request<Body>) -> Result<Response<Body>, std::convert::Infallible> {
// ...
}
let svc = ServiceBuilder::new()
// Timeout bodies after 30 seconds of inactivity
.layer(RequestBodyTimeoutLayer::new(Duration::from_secs(30)))
.service_fn(handle);
Implementations§
source§impl<B> TimeoutBody<B>
impl<B> TimeoutBody<B>
sourcepub fn new(timeout: Duration, body: B) -> Self
pub fn new(timeout: Duration, body: B) -> Self
Creates a new TimeoutBody
.
Trait Implementations§
source§impl<B> Body for TimeoutBody<B>where
B: Body,
B::Error: Into<BoxError>,
impl<B> Body for TimeoutBody<B>where B: Body, B::Error: Into<BoxError>,
source§fn poll_data(
self: Pin<&mut Self>,
cx: &mut Context<'_>
) -> Poll<Option<Result<Self::Data, Self::Error>>>
fn poll_data( self: Pin<&mut Self>, cx: &mut Context<'_> ) -> Poll<Option<Result<Self::Data, Self::Error>>>
Attempt to pull out the next data buffer of this stream.
source§fn poll_trailers(
self: Pin<&mut Self>,
cx: &mut Context<'_>
) -> Poll<Result<Option<HeaderMap>, Self::Error>>
fn poll_trailers( self: Pin<&mut Self>, cx: &mut Context<'_> ) -> Poll<Result<Option<HeaderMap>, Self::Error>>
Poll for an optional single
HeaderMap
of trailers. Read moresource§fn is_end_stream(&self) -> bool
fn is_end_stream(&self) -> bool
Returns
true
when the end of stream has been reached. Read moresource§fn size_hint(&self) -> SizeHint
fn size_hint(&self) -> SizeHint
Returns the bounds on the remaining length of the stream. Read more
impl<'__pin, B> Unpin for TimeoutBody<B>where __Origin<'__pin, B>: Unpin,
Auto Trait Implementations§
impl<B> !RefUnwindSafe for TimeoutBody<B>
impl<B> Send for TimeoutBody<B>where B: Send,
impl<B> Sync for TimeoutBody<B>where B: Sync,
impl<B> !UnwindSafe for TimeoutBody<B>
Blanket Implementations§
source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere T: ?Sized,
source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more