implement WriteStream
This commit is contained in:
parent
69aa2ded18
commit
4a60850712
1 changed files with 43 additions and 0 deletions
|
|
@ -38,3 +38,46 @@ impl<'a> ReadStream<'a> {
|
|||
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)?)
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue