pub(crate) mod handle;
use self::handle::StreamingBodyHandle;
use super::Body;
use std::io::{BufWriter, Write};
pub struct StreamingBody {
writer: BufWriter<StreamingBodyHandle>,
}
impl StreamingBody {
fn handle(&mut self) -> &mut StreamingBodyHandle {
self.writer.get_mut()
}
#[cfg_attr(
feature = "unstable-doc",
doc(include = "../../../docs/snippets/body-append-constant-time.md")
)]
pub fn append(&mut self, other: Body) {
self.writer.flush().expect("fastly_http_body::write failed");
self.handle().append(other.into_handle())
}
pub fn write_bytes(&mut self, bytes: &[u8]) -> usize {
self.writer
.write(bytes)
.expect("fastly_http_body::write failed")
}
pub fn write_str(&mut self, string: &str) -> usize {
self.write_bytes(string.as_ref())
}
}
impl From<StreamingBodyHandle> for StreamingBody {
fn from(handle: StreamingBodyHandle) -> Self {
Self {
writer: BufWriter::new(handle),
}
}
}
impl Write for StreamingBody {
fn write(&mut self, buf: &[u8]) -> std::io::Result<usize> {
self.writer.write(buf)
}
fn write_vectored(&mut self, bufs: &[std::io::IoSlice<'_>]) -> std::io::Result<usize> {
self.writer.write_vectored(bufs)
}
fn flush(&mut self) -> std::io::Result<()> {
self.writer.flush()
}
}