pub(crate) struct Buffer {
buffer: Vec<String>,
}
impl Buffer {
pub(crate) fn new() -> Self {
Self {
buffer: Vec::<String>::new(),
}
}
pub(crate) fn append_line(&mut self, line: String) {
if line.starts_with(char::from(0)) {
let line = line.trim_start_matches(char::from(0)).to_string();
self.buffer.push(line);
} else {
self.buffer.push(line);
}
}
pub(crate) fn append_last_line(&mut self, line: String) {
self.buffer.push(line);
let pos = self
.buffer
.iter()
.rev()
.take(10)
.position(|line| line.starts_with("<key>idle_ratio</key>"));
if let Some(pos) = pos {
self.buffer.remove(self.buffer.len() - pos - 1);
}
}
pub(crate) fn finalize(&mut self) -> String {
let plist = self.buffer.join("\n");
self.buffer.clear();
plist
}
}