pub trait Payload: Send + 'static {
type Data: Buf + Send;
type Error: Into<Box<dyn StdError + Send + Sync>>;
fn poll_data(&mut self) -> Poll<Option<Self::Data>, Self::Error>;
fn poll_trailers(&mut self) -> Poll<Option<HeaderMap>, Self::Error> { ... }
fn is_end_stream(&self) -> bool { ... }
fn content_length(&self) -> Option<u64> { ... }
}
Expand description
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
Required methods
Provided methods
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
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>
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.