1pub struct Writer {
2 buffer: Vec<u8>,
3 pos: usize,
4}
5
6impl Writer {
7 pub fn new(v: Vec<u8>) -> Writer {
9 Writer { buffer: v, pos: 0 }
10 }
11
12 pub fn finish(self) -> Vec<u8> {
14 self.buffer
15 }
16
17 pub fn write(&mut self, v: u8) {
18 self.buffer[self.pos] = v;
19 self.pos += 1;
20 }
21
22 pub fn write_bytes(&mut self, bytes: &[u8]) {
23 let mut cursor = self.pos;
24 let buff = &mut self.buffer;
25
26 for b in bytes {
27 buff[cursor] = *b;
28 cursor += 1;
29 }
30
31 self.pos = cursor;
32 }
33
34 pub fn write_string(&mut self, str: &str, fill: usize) {
35 let bytes = str.as_bytes();
36 self.write_bytes(bytes);
37 self.fill_till(0, fill - bytes.len());
38 }
39
40 pub fn skip(&mut self, skip: usize) {
41 self.pos += skip
42 }
43
44 pub fn seek(&mut self, new_pos: usize) {
45 self.pos = new_pos;
46 }
47
48 pub fn pos(&self) -> usize {
49 self.pos
50 }
51
52 fn fill_till(&mut self, v: u8, until: usize) {
53 if until == 0 {
54 return;
55 }
56
57 for _i in 0..until {
58 self.buffer[self.pos] = v;
59 self.pos += 1;
60 }
61 }
62}