gistools/parsers/write/
buffer.rs1use super::Writer;
2use alloc::{borrow::ToOwned, vec::Vec};
3
4#[derive(Debug, Default)]
6pub struct BufferWriter {
7 buffer: Vec<u8>,
8}
9impl BufferWriter {
10 pub fn new(buffer: Vec<u8>) -> Self {
12 Self { buffer }
13 }
14
15 pub fn resize(&mut self, size: usize) {
17 if size <= self.buffer.len() {
18 return;
19 }
20 self.buffer.resize(size, 0);
21 }
22}
23impl Writer for BufferWriter {
24 fn offset(&mut self) -> u64 {
25 self.buffer.len() as u64
26 }
27 fn write(&mut self, data: &[u8], offset: u64) {
28 self.resize(offset as usize + data.len());
29 let offset = offset as usize;
30 self.buffer[offset..offset + data.len()].copy_from_slice(data);
31 }
32 fn append(&mut self, data: &[u8]) {
33 self.buffer.extend(data);
34 }
35 fn append_string(&mut self, string: &str) {
36 self.buffer.extend(string.as_bytes());
37 }
38 fn take(&mut self) -> Vec<u8> {
39 self.buffer.to_owned()
40 }
41 fn slice(&mut self, start: u64, end: u64) -> Vec<u8> {
42 let start = start as usize;
43 let end = end as usize;
44 self.buffer[start..end].to_vec()
45 }
46 fn flush(&mut self) {}
47}