use std::io;
pub trait LengthDelimitedWriteExt {
fn write_delimited(&mut self, data: &[u8]) -> io::Result<usize>;
fn write_str_delimited(&mut self, text: &str) -> io::Result<usize> {
self.write_delimited(text.as_bytes())
}
}
impl<T: ?Sized + io::Write> LengthDelimitedWriteExt for T {
fn write_delimited(&mut self, data: &[u8]) -> io::Result<usize> {
let delimiter = u32::try_from(data.len())
.map_err(io::Error::other)?
.to_le_bytes();
let size = self.write(&delimiter)?;
if size < delimiter.len() {
Ok(size)
} else {
Ok(size + self.write(data)?)
}
}
}