summaryrefslogtreecommitdiffstats
path: root/src/reader.rs
blob: b90097c17709a24f7547937fc70599f5ca83f740 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
use std::io::{self, prelude::*};

pub struct BufReader<R> {
    reader: io::BufReader<R>,
}

impl<R: Read> BufReader<R> {
    pub fn new(f: R) -> Self {
        Self { reader: io::BufReader::new(f) }
    }

    pub fn read_line<'buf>(
        &mut self,
        buffer: &'buf mut String,
    ) -> Option<io::Result<&'buf mut String>> {
        buffer.clear();

        self.reader
            .read_line(buffer)
            .map(|u| if u == 0 { None } else { Some(buffer) })
            .transpose()
    }
}