//! This module proposes reading file helper functions. use std::fs; use crate::parse::string_to_numbers; /// Read a file & return its contents in a Vec structure /// /// ``` /// use mkz_aoc::file; /// /// fn main() { /// let lines = file ::read_to_numbers("input.txt"); /// } /// ``` pub fn read_to_lines(_filename: &str) -> Result, String> { let _contents = fs::read_to_string(_filename); if let Err(v) = _contents { return Err(format!("Could not read file: {}", v)); } let lines = _contents.unwrap().lines().map(|x| x.to_string()).collect::>(); Ok(lines) } /// Read a file & return its contents in a Vec structure pub fn read_to_numbers(_filename: &str) -> Result, String> { let _lines = read_to_lines(_filename); if let Err(v) = _lines { return Err(v); } Ok(_lines.unwrap().iter().map(|x| x.parse::().unwrap()).collect::>()) } /// Read a file & return its first line in a String pub fn read_to_string(_filename: &str) -> Result { let _lines = read_to_lines(_filename); match _lines { Ok(lines) => if lines.len() >= 1 { Ok(lines[0].clone()) } else { Err(String::from("Missing content")) }, Err(v) => Err(v) } } /// Read a file for a matrix & return it in a Vec> data structure. pub fn read_to_matrix(_filename: &str) -> Result>, String> { let _lines = read_to_lines(_filename); if let Err(v) = _lines { return Err(v); } Ok(_lines .unwrap() .iter() .map(|x| string_to_numbers(x.to_string())) .collect() ) }