summaryrefslogtreecommitdiffstats
path: root/src/reader.rs
blob: 06349b7ab68801f24d099ac6b6ad67b571740f25 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
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()
    }
}