1 use crate::Body; 2 3 use core::future::Future; 4 use core::pin::Pin; 5 use core::task; 6 7 #[must_use = "futures don't do anything unless polled"] 8 #[derive(Debug)] 9 /// Future that resolves to the next data chunk from `Body` 10 pub struct Data<'a, T: ?Sized>(pub(crate) &'a mut T); 11 12 impl<'a, T: Body + Unpin + ?Sized> Future for Data<'a, T> { 13 type Output = Option<Result<T::Data, T::Error>>; 14 poll(mut self: Pin<&mut Self>, ctx: &mut task::Context<'_>) -> task::Poll<Self::Output>15 fn poll(mut self: Pin<&mut Self>, ctx: &mut task::Context<'_>) -> task::Poll<Self::Output> { 16 Pin::new(&mut self.0).poll_data(ctx) 17 } 18 } 19 20 #[must_use = "futures don't do anything unless polled"] 21 #[derive(Debug)] 22 /// Future that resolves to the optional trailers from `Body` 23 pub struct Trailers<'a, T: ?Sized>(pub(crate) &'a mut T); 24 25 impl<'a, T: Body + Unpin + ?Sized> Future for Trailers<'a, T> { 26 type Output = Result<Option<http::HeaderMap>, T::Error>; 27 poll(mut self: Pin<&mut Self>, ctx: &mut task::Context<'_>) -> task::Poll<Self::Output>28 fn poll(mut self: Pin<&mut Self>, ctx: &mut task::Context<'_>) -> task::Poll<Self::Output> { 29 Pin::new(&mut self.0).poll_trailers(ctx) 30 } 31 } 32