Trait conjure_runtime::Body[][src]

pub trait Body {
    fn content_length(&self) -> Option<u64>;
fn content_type(&self) -> HeaderValue;
fn write<'life0, 'life1, 'async_trait>(
        self: Pin<&'life0 mut Self>,
        w: Pin<&'life1 mut BodyWriter>
    ) -> Pin<Box<dyn Future<Output = Result<(), Error>> + Send + 'async_trait>>
    where
        'life0: 'async_trait,
        'life1: 'async_trait,
        Self: 'async_trait
;
fn reset<'life0, 'async_trait>(
        self: Pin<&'life0 mut Self>
    ) -> Pin<Box<dyn Future<Output = bool> + Send + 'async_trait>>
    where
        'life0: 'async_trait,
        Self: 'async_trait
; fn full_body(&self) -> Option<Bytes> { ... } }
Expand description

A request body.

This trait can be most easily implemented with the async-trait crate. While it supports both in-memory and streaming bodies, in-memory bodies can use the BytesBody type rather than creating a new implementation of this trait.

Examples

use async_trait::async_trait;
use conjure_runtime::{Body, BodyWriter};
use conjure_error::Error;
use http::HeaderValue;
use std::pin::Pin;
use tokio::io::AsyncWriteExt;

pub struct SimpleBody;

#[async_trait]
impl Body for SimpleBody {
    fn content_length(&self) -> Option<u64> {
        None
    }

    fn content_type(&self) -> HeaderValue {
        HeaderValue::from_static("application/octet-stream")
    }

    async fn write(self: Pin<&mut Self>, mut w: Pin<&mut BodyWriter>) -> Result<(), Error> {
        w.write_all(b"hello world").await.map_err(Error::internal_safe)
    }

    async fn reset(self: Pin<&mut Self>) -> bool {
        true
    }
}

Required methods

Returns the length of the body if known.

Returns the content type of the body.

Writes the body data out.

Resets the body to its start.

Returns true iff the body was successfully reset.

Requests with non-resettable bodies cannot be retried.

Provided methods

Returns the entire body if it is fully buffered.

write will only be called if this method returns None.

The default implementation returns None.

Implementors