rucksack_db/csv/
reader.rs1use 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}