diff --git a/src/bin/bat/app.rs b/src/bin/bat/app.rs index 65f55472..542e5d99 100644 --- a/src/bin/bat/app.rs +++ b/src/bin/bat/app.rs @@ -136,10 +136,11 @@ impl App { } }); - if self.matches.value_of("file-name").is_some() - && self.matches.values_of("file-name").unwrap().len() != files.len() - { - return Err("When using --file-name, each input file must have a corresponding --file-name specified.".into()); + match self.matches.values_of("file-name") { + Some(filenames) if filenames.len() != files.len() => { + return Err(format!("{} {}", filenames.len(), files.len()).into()); + } + _ => {} } Ok(Config { diff --git a/src/controller.rs b/src/controller.rs index 21c7f81c..90e465bd 100644 --- a/src/controller.rs +++ b/src/controller.rs @@ -45,20 +45,12 @@ impl<'b> Controller<'b> { let stdin = io::stdin(); - let filenames = if self.config.filenames.is_none() { - vec![None; self.config.files.len()] - } else { - self.config - .filenames - .as_ref() - .unwrap() - .into_iter() - .map(|name| Some(*name)) - .collect() + let filenames: Box> = match self.config.filenames { + Some(ref filenames) => Box::new(filenames.into_iter().map(|name| Some(*name))), + None => Box::new(std::iter::repeat(None)), }; - for it in self.config.files.iter().zip(filenames) { - let (input_file, file_name) = it; + for (input_file, file_name) in self.config.files.iter().zip(filenames) { match input_file.get_reader(&stdin) { Err(error) => { handle_error(&error);