[][src]Trait hyper::body::Payload

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> { ... } }

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.

Loading content...

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.

Loading content...

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.

Loading content...

Implementations on Foreign Types

impl<E: Payload> Payload for Box<E>[src]

type Data = E::Data

type Error = E::Error

Loading content...

Implementors

impl Payload for Body[src]

type Data = Chunk

type Error = Error

Loading content...