use crate::error::{Error, Result};
use crate::streaming::buffered::BufferedStreamingParser;
use std::io::{Read};
impl<R: Read> BufferedStreamingParser<R> {
pub(super) fn fill_buffers(&mut self) -> Result<()> {
if self.end_of_input {
return Ok(());
}
let mut buffer = vec![0u8; 1024];
match self.reader.read(&mut buffer) {
Ok(0) => {
self.end_of_input = true;
let tokens = self.lexer.flush()?;
self.token_buffer.extend(tokens);
}
Ok(n) => {
let input_str = std::str::from_utf8(&buffer[..n])
.map_err(|_| Error::InvalidUtf8(self.lexer.position()))?;
self.input_accumulator.push_str(input_str);
let (tokens, _needs_more) = self.lexer.feed(input_str)?;
self.token_buffer.extend(tokens);
}
Err(e) => {
return Err(Error::Custom(format!("IO error: {e}")));
}
}
Ok(())
}
}