gistools/parsers/write/
buffer.rs

1use super::Writer;
2use alloc::{borrow::ToOwned, vec::Vec};
3
4/// Buffer writer is used on smaller datasets that are easy to write in memory. Faster then the Filesystem
5#[derive(Debug, Default)]
6pub struct BufferWriter {
7    buffer: Vec<u8>,
8}
9impl BufferWriter {
10    /// Create a new BufferWriter
11    pub fn new(buffer: Vec<u8>) -> Self {
12        Self { buffer }
13    }
14
15    /// Resize the buffer if needed
16    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}