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}