diff --git a/src/main.rs b/src/main.rs index 753ce83..eb0c939 100644 --- a/src/main.rs +++ b/src/main.rs @@ -19,7 +19,7 @@ fn main() { let matches = App::from_yaml(yaml).get_matches(); let sources: HashMap = if matches.is_present("sources_file") { - parse_file(&matches.value_of("sources_file").unwrap()) + parse_sources_config_file(&matches.value_of("sources_file").unwrap()) } else { let mut list: HashMap = HashMap::new(); list.insert( @@ -60,26 +60,38 @@ fn main() { } } -fn parse_file(filepath: &str) -> HashMap { +fn parse_sources_config_file(filepath: &str) -> HashMap { let mut list: HashMap = HashMap::new(); - let file = File::open(filepath).unwrap_or_else(|err| { - eprintln!("Problem openning file: {}", err); - process::exit(1); - }); - - let lines = BufReader::new(file).lines(); - for line in lines { - let content = line.unwrap_or_else(|err| { - eprintln!("Problem parsing lines: {}", err); - process::exit(1); - }); - let vec: Vec<&str> = content.split('|').collect(); - list.insert( - vec[0].to_owned(), - Source { - url: vec[1].to_owned(), - }, - ); - } + if let Ok(file) = File::open(filepath) { + let lines = BufReader::new(file).lines(); + for line in lines { + let content = line.unwrap_or_else(|err| { + eprintln!("Problem parsing lines: {}", err); + process::exit(1); + }); + let vec: Vec<&str> = content.split('|').collect(); + list.insert( + vec[0].to_owned(), + Source { + url: vec[1].to_owned(), + }, + ); + } + } else { + eprintln!("Problem opening file: {}", filepath); + }; list } + +#[cfg(test)] +mod tests { + use super::parse_sources_config_file; + + #[test] + fn test_parse_sources_config_file() { + let source_config = parse_sources_config_file("test_data/sample_config"); + assert!(source_config.contains_key("StevenBlack")); + assert!(source_config.get("StevenBlack").is_some()); + assert!(source_config.get("StevenBlack").unwrap().url == String::from("https://raw.githubusercontent.com/StevenBlack/hosts/master/hosts")); + } +} diff --git a/test_data/sample_config b/test_data/sample_config new file mode 100644 index 0000000..fd494ac --- /dev/null +++ b/test_data/sample_config @@ -0,0 +1 @@ +StevenBlack|https://raw.githubusercontent.com/StevenBlack/hosts/master/hosts