use std::collections::VecDeque; const MAX_LINES: usize = 2000; pub struct LogBuffer { lines: VecDeque, pub dirty: bool, } impl LogBuffer { pub fn new() -> Self { Self { lines: VecDeque::with_capacity(MAX_LINES), dirty: false, } } pub fn push(&mut self, line: String) { if self.lines.len() >= MAX_LINES { self.lines.pop_front(); } self.lines.push_back(line); self.dirty = true; } pub fn lines(&self) -> impl Iterator { self.lines.iter().map(String::as_str) } pub fn clear(&mut self) { self.lines.clear(); self.dirty = true; } }