use std::collections::HashMap; use std::fs::File; use std::io::{self, Read}; use std::path::Path; pub type Result = std::result::Result>; pub type Passport = HashMap; pub fn read_file>(path: P) -> io::Result> { let mut file = File::open(path)?; let mut content = String::new(); file.read_to_string(&mut content)?; let mut passports = vec![]; for passport in content.split("\n\n") { let passport = passport.trim_end(); let pairs = passport.split(&['\n', ' ', ':'][..]).collect::>(); let mut passport = Passport::new(); for pair in pairs.chunks_exact(2) { passport.insert(pair[0].to_owned(), pair[1].to_owned()); } passports.push(passport); } Ok(passports) }