implement WriteStream

This commit is contained in:
mykola2312 2023-08-30 01:36:27 +03:00
parent 69aa2ded18
commit 4a60850712

View file

@ -38,3 +38,46 @@ impl<'a> ReadStream<'a> {
Ok(self.rdr.read_u32::<LittleEndian>()?) Ok(self.rdr.read_u32::<LittleEndian>()?)
} }
} }
pub struct WriteStream {
buf: Cursor<Vec<u8>>,
}
impl WriteStream {
pub fn new(capacity: usize) -> WriteStream {
WriteStream {
buf: Cursor::new(Vec::with_capacity(capacity)),
}
}
pub fn into_raw(self, offset: usize, size: usize) -> Raw {
let buf_size = self.buf.get_ref().len();
Raw {
offset: offset,
size: if size == 0 { buf_size } else { size },
mem: self.buf.into_inner(),
}
}
pub fn offset(&self) -> usize {
self.buf.position() as usize
}
pub fn write_bytes(&mut self, bytes: &[u8]) {
self.buf.get_mut().extend(bytes.iter());
}
pub fn write<T: Decoder>(&mut self, val: &T) -> Result<()> {
let mut raw = val.encode()?;
self.buf.get_mut().append(&mut raw.mem);
Ok(())
}
pub fn write_u16(&mut self, val: u16) -> Result<()> {
Ok(self.buf.write_u16::<LittleEndian>(val)?)
}
pub fn write_u32(&mut self, val: u32) -> Result<()> {
Ok(self.buf.write_u32::<LittleEndian>(val)?)
}
}