| 334 | |
| 335 | impl<R: Read> Read for JsonArrayToNdjsonReader<R> { |
| 336 | fn read(&mut self, buf: &mut [u8]) -> std::io::Result<usize> { |
| 337 | // If output buffer is empty, fill it |
| 338 | if self.output_pos >= self.output_filled { |
| 339 | self.fill_output_buffer()?; |
| 340 | if self.output_filled == 0 { |
| 341 | return Ok(0); // EOF |
| 342 | } |
| 343 | } |
| 344 | |
| 345 | // Copy from output buffer to caller's buffer |
| 346 | let available = self.output_filled - self.output_pos; |
| 347 | let to_copy = std::cmp::min(available, buf.len()); |
| 348 | buf[..to_copy].copy_from_slice( |
| 349 | &self.output_buffer[self.output_pos..self.output_pos + to_copy], |
| 350 | ); |
| 351 | self.output_pos += to_copy; |
| 352 | Ok(to_copy) |
| 353 | } |
| 354 | } |
| 355 | |
| 356 | impl<R: Read> BufRead for JsonArrayToNdjsonReader<R> { |