ddb_core/file_io/
reader.rs1use crate::error::Result;
3use std::fs::File;
4use std::io::{BufRead, BufReader};
5use std::path::Path;
6
7pub struct LineReader {
8 reader: BufReader<File>,
9 line_number: usize,
10}
11
12impl LineReader {
13 pub fn new<P: AsRef<Path>>(path: P) -> Result<Self> {
14 let file = File::open(path)?;
15 let reader = BufReader::new(file);
16
17 Ok(Self {
18 reader,
19 line_number: 0,
20 })
21 }
22
23 pub fn current_line(&self) -> usize {
24 self.line_number
25 }
26}
27
28impl Iterator for LineReader {
29 type Item = Result<String>;
30
31 fn next(&mut self) -> Option<Self::Item> {
32 let mut line = String::new();
33
34 match self.reader.read_line(&mut line) {
35 Ok(0) => None, Ok(_) => {
37 self.line_number += 1;
38 Some(Ok(line))
39 }
40 Err(e) => Some(Err(e.into())),
41 }
42 }
43}