spcsv/
reader.rs

1use std::{
2    fs::File,
3    io::{self, prelude::*},
4};
5
6pub struct BufReader {
7    reader: io::BufReader<File>,
8}
9
10impl BufReader {
11    pub fn open(path: impl AsRef<std::path::Path>) -> io::Result<Self> {
12        let file = File::open(path)?;
13        let reader = io::BufReader::new(file);
14
15        Ok(Self { reader })
16    }
17
18    pub fn read_line<'buf>(
19        &mut self,
20        buffer: &'buf mut String,
21    ) -> Option<io::Result<&'buf mut String>> {
22        buffer.clear();
23
24        self.reader
25            .read_line(buffer)
26            .map(|u| if u == 0 { None } else { Some(buffer) })
27            .transpose()
28    }
29}