rucksack_db/csv/
reader.rs

1use std::io::Cursor;
2
3use anyhow::{Error, Result};
4
5use rucksack_lib::file;
6
7pub fn from_path(path: String) -> Result<csv::Reader<Cursor<Vec<u8>>>, Error> {
8    let bytes = file::read(path)?;
9    Ok(csv::Reader::from_reader(Cursor::new(bytes)))
10}
11
12#[cfg(test)]
13mod tests {
14    use super::*;
15    use std::io::Write;
16    use tempfile::NamedTempFile;
17
18    #[test]
19    fn test_from_path_valid_csv() {
20        let mut temp_file = NamedTempFile::new().unwrap();
21        let csv_data = b"name,age\nAlice,30\nBob,25\n";
22        temp_file.write_all(csv_data).unwrap();
23
24        let path = temp_file.path().to_str().unwrap().to_string();
25        let result = from_path(path);
26        assert!(result.is_ok());
27
28        let mut reader = result.unwrap();
29        let records: Vec<_> = reader.records().collect();
30        assert_eq!(records.len(), 2);
31    }
32
33    #[test]
34    fn test_from_path_nonexistent_file() {
35        let result = from_path("/nonexistent/path/file.csv".to_string());
36        assert!(result.is_err());
37    }
38}