[−][src]Trait hyper::body::Payload
This trait represents a streaming body of a Request
or Response
.
The built-in implementation of this trait is Body
, in case you
don't need to customize a send stream for your own application.
Associated Types
type Data: Buf + Send
A buffer of bytes representing a single chunk of a body.
type Error: Into<Box<dyn StdError + Send + Sync>>
The error type of this stream.
Required methods
fn poll_data(&mut self) -> Poll<Option<Self::Data>, Self::Error>
Poll for a Data
buffer.
Similar to Stream::poll_next
, this yields Some(Data)
until
the body ends, when it yields None
.
Provided methods
fn poll_trailers(&mut self) -> Poll<Option<HeaderMap>, Self::Error>
Poll for an optional single HeaderMap
of trailers.
This should only be called after poll_data
has ended.
Note: Trailers aren't currently used for HTTP/1, only for HTTP/2.
fn is_end_stream(&self) -> bool
A hint that the Body
is complete, and doesn't need to be polled more.
This can be useful to determine if the there is any body or trailers
without having to poll. An empty Body
could return true
and hyper
would be able to know that only the headers need to be sent. Or, it can
also be checked after each poll_data
call, to allow hyper to try to
end the underlying stream with the last chunk, instead of needing to
send an extra DATA
frame just to mark the stream as finished.
As a hint, it is used to try to optimize, and thus is OK for a default
implementation to return false
.
fn content_length(&self) -> Option<u64>
Return a length of the total bytes that will be streamed, if known.
If an exact size of bytes is known, this would allow hyper to send a
Content-Length
header automatically, not needing to fall back to
Transfer-Encoding: chunked
.
This does not need to be kept updated after polls, it will only be called once to create the headers.