use std::{ fs::File, io::{BufRead, BufReader, Error}, }; use crate::Session; pub struct Hosts(Vec); impl Hosts { pub fn open() -> Result { let buf_reader = BufReader::new(File::open("/etc/hosts")?); let inner: Vec = buf_reader .lines() .flatten() .take_while(|s| !s.starts_with('#')) .flat_map(|l| { l.split_whitespace() .skip(1) .take_while(|s| !s.starts_with('#')) .map(Session::from) .collect::>() }) .collect(); Ok(Self(inner)) } } impl IntoIterator for Hosts { type Item = Session; type IntoIter = std::vec::IntoIter; fn into_iter(self) -> Self::IntoIter { self.0.into_iter() } }