pub struct Body { /* private fields */ }
Expand description
The body of a Request
.
In most cases, this is not needed directly, as the
RequestBuilder.body
method uses Into<Body>
, which allows
passing many things (like a string or vector of bytes).
Implementations§
source§impl Body
impl Body
sourcepub fn new<R: Read + Send + 'static>(reader: R) -> Body
pub fn new<R: Read + Send + 'static>(reader: R) -> Body
Instantiate a Body
from a reader.
§Note
While allowing for many types to be used, these bodies do not have
a way to reset to the beginning and be reused. This means that when
encountering a 307 or 308 status code, instead of repeating the
request at the new location, the Response
will be returned with
the redirect status code set.
let file = File::open("national_secrets.txt")?;
let body = Body::new(file);
If you have a set of bytes, like String
or Vec<u8>
, using the
From
implementations for Body
will store the data in a manner
it can be reused.
let s = "A stringy body";
let body = Body::from(s);
sourcepub fn sized<R: Read + Send + 'static>(reader: R, len: u64) -> Body
pub fn sized<R: Read + Send + 'static>(reader: R, len: u64) -> Body
Create a Body
from a Read
where the size is known in advance
but the data should not be fully loaded into memory. This will
set the Content-Length
header and stream from the Read
.
let file = File::open("a_large_file.txt")?;
let file_size = file.metadata()?.len();
let body = Body::sized(file, file_size);
sourcepub fn as_bytes(&self) -> Option<&[u8]>
pub fn as_bytes(&self) -> Option<&[u8]>
Returns the body as a byte slice if the body is already buffered in
memory. For streamed requests this method returns None
.
sourcepub fn buffer(&mut self) -> Result<&[u8], Error>
pub fn buffer(&mut self) -> Result<&[u8], Error>
Converts streamed requests to their buffered equivalent and returns a reference to the buffer. If the request is already buffered, this has no effect.
Be aware that for large requests this method is expensive and may cause your program to run out of memory.