code_minimap/
lossy_reader.rs

1use 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}