use super::{Body, SizeHint}; use bytes::Buf; use http::HeaderMap; use std::{ convert::Infallible, fmt, marker::PhantomData, pin::Pin, task::{Context, Poll}, }; /// A body that is always empty. pub struct Empty { _marker: PhantomData D>, } impl Empty { /// Create a new `Empty`. pub fn new() -> Self { Self::default() } } impl Body for Empty { type Data = D; type Error = Infallible; #[inline] fn poll_data( self: Pin<&mut Self>, _cx: &mut Context<'_>, ) -> Poll>> { Poll::Ready(None) } #[inline] fn poll_trailers( self: Pin<&mut Self>, _cx: &mut Context<'_>, ) -> Poll, Self::Error>> { Poll::Ready(Ok(None)) } fn is_end_stream(&self) -> bool { true } fn size_hint(&self) -> SizeHint { SizeHint::with_exact(0) } } impl fmt::Debug for Empty { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { f.debug_struct("Empty").finish() } } impl Default for Empty { fn default() -> Self { Self { _marker: PhantomData, } } } impl Clone for Empty { fn clone(&self) -> Self { Self { _marker: PhantomData, } } } impl Copy for Empty {}