#![deny(missing_docs)]
#[derive(Debug, Default, Clone)]
pub struct Lineifier {
buf: String,
}
impl Lineifier {
pub fn new() -> Self {
Self::default()
}
pub fn push(&mut self, chunk: &str) -> Vec<String> {
self.buf.push_str(chunk);
let mut out = Vec::new();
while let Some(nl) = self.buf.find('\n') {
let line: String = self.buf.drain(..nl).collect();
self.buf.drain(..1); let line = line.trim_end_matches('\r').to_string();
out.push(line);
}
out
}
pub fn flush(&mut self) -> String {
std::mem::take(&mut self.buf)
}
pub fn pending(&self) -> usize {
self.buf.len()
}
}