use syntax::file_list::FileList; pub fn parse_file_list(input: &str) -> FileList { let mut file_list = FileList::default(); for line in input.lines() { if let Some(working_dir) = line.strip_prefix("PWD ") { file_list.working_dir = Some(working_dir.into()); } else if let Some(input) = line.strip_prefix("INPUT ") { file_list.inputs.insert(input.into()); } else if let Some(output) = line.strip_prefix("OUTPUT ") { file_list.outputs.insert(output.into()); } } file_list } #[cfg(test)] mod tests { use rustc_hash::FxHashSet; use super::*; #[test] fn test_parse_file_list() { let input = r#" PWD /home/user INPUT file1.tex INPUT file1.tex OUTPUT file2.pdf"#; let expected_file_list = FileList { working_dir: Some("/home/user".into()), inputs: FxHashSet::from_iter(["file1.tex".into()]), outputs: FxHashSet::from_iter(["file2.pdf".into()]), }; let actual_file_list = parse_file_list(input); assert_eq!(actual_file_list, expected_file_list); assert_eq!(actual_file_list.working_dir, Some("/home/user".into())); assert_eq!(actual_file_list.inputs.len(), 1); assert_eq!(actual_file_list.outputs.len(), 1); } }