pub struct StringBuffer { pub bytes: Vec, pub pointer: usize, } impl StringBuffer { pub fn new() -> Self { Self { bytes: Vec::new(), pointer: 0, } } pub fn from_str(text: &str) -> Self { let mut new = Self::new(); new.set_str(text); new } pub fn set_str(&mut self, text: &str) { self.bytes = text.bytes().collect(); self.pointer = 0; } pub fn read(&mut self) -> u8 { if let Some(byte) = self.bytes.get(self.pointer) { self.pointer += 1; *byte } else { 0 } } pub fn restart(&mut self) { self.pointer = 0; } }