tower_hyper/
body.rs

1//! Tower <-> hyper body utilities
2
3use futures::Poll;
4use http_body::Body as HttpBody;
5use hyper::body::Payload;
6
7pub use hyper::Body;
8
9/// Lifts a body to support `Payload`
10#[derive(Debug)]
11pub struct LiftBody<T> {
12    inner: T,
13}
14
15impl<T: HttpBody> From<T> for LiftBody<T> {
16    fn from(inner: T) -> Self {
17        LiftBody { inner }
18    }
19}
20
21impl<T> Payload for LiftBody<T>
22where
23    T: HttpBody + Send + 'static,
24    T::Data: Send,
25    T::Error: Into<crate::Error>,
26{
27    type Data = T::Data;
28    type Error = T::Error;
29
30    fn poll_data(&mut self) -> Poll<Option<Self::Data>, Self::Error> {
31        self.inner.poll_data()
32    }
33
34    fn poll_trailers(&mut self) -> Poll<Option<hyper::HeaderMap>, Self::Error> {
35        self.inner.poll_trailers()
36    }
37    fn is_end_stream(&self) -> bool {
38        self.inner.is_end_stream()
39    }
40}