code_minimap/
lossy_reader.rs1use std::io::{self, BufRead, BufReader, Read};
2
3pub struct LossyReader<R> {
4 inner: BufReader<R>,
5}
6
7impl<R: Read> LossyReader<R> {
8 pub fn new(inner: R) -> Self {
9 Self { inner: BufReader::new(inner) }
10 }
11}
12
13impl<R: Read> Read for LossyReader<R> {
14 fn read(&mut self, buf: &mut [u8]) -> io::Result<usize> {
15 self.inner.read(buf)
16 }
17}
18
19impl<R: Read> BufRead for LossyReader<R> {
20 fn fill_buf(&mut self) -> io::Result<&[u8]> {
21 self.inner.fill_buf()
22 }
23
24 fn consume(&mut self, amt: usize) {
25 self.inner.consume(amt)
26 }
27
28 fn read_line(&mut self, buf: &mut String) -> std::io::Result<usize> {
29 let mut bytes = Vec::new();
30 let len = self.read_until(b'\n', &mut bytes)?;
31 buf.push_str(&String::from_utf8_lossy(&bytes));
32 Ok(len)
33 }
34}