pub trait TypedBody {
type Body: RawBody<Data = Bytes> + Send + 'static;
// Required methods
fn content_type(&self) -> HeaderValue;
fn body(self) -> Self::Body;
}Expand description
A trait that ties together a Response body with
its expected Content-Type header.
Check out Response::set_typed_body for more details
on TypedBody is leveraged when building a Response.
§Implementing TypedBody
You might find yourself implementing TypedBody if none of the implementations
provided out-of-the-box by Pavex in the body module satisfies your needs.
You need to specify two things:
- The value of the
Content-Typeheader - The low-level representation of your body type
Let’s focus on 2., the trickier bit. You’ll be working with the types in
the body::raw module.
§Buffered body
Full<Bytes> is the “canonical” choice if your body is fully
buffered in memory before being transmitted over the network.
You need to convert your body type into a buffer (Bytes)
which is then wrapped in Full to signal that the entire
body is a single “chunk”.
Let’s see how you could implement TypedBody for a String wrapper
as a reference example:
use pavex::http::HeaderValue;
use pavex::response::body::{
TypedBody,
raw::{Full, Bytes}
};
struct MyString(String);
impl TypedBody for MyString {
type Body = Full<Bytes>;
fn content_type(&self) -> HeaderValue {
HeaderValue::from_static("text/plain; charset=utf-8")
}
fn body(self) -> Self::Body {
Full::new(self.0.into())
}
}§Streaming body
Streaming bodies are trickier.
You might need to implement RawBody directly for your body type.
Required Associated Types§
Required Methods§
Sourcefn content_type(&self) -> HeaderValue
fn content_type(&self) -> HeaderValue
The header value that should be used as Content-Type when
returning this Response.