diff --git a/src/features.rs b/src/features.rs index 9ecc3f64..294c76a6 100644 --- a/src/features.rs +++ b/src/features.rs @@ -86,34 +86,25 @@ fn print_file( printer: &mut Printer, filename: Option<&str>, ) -> Result<()> { - printer.print_header(filename)?; + let stdin = io::stdin(); // TODO: this is not always needed + { + let reader: Box = match filename { + None => Box::new(stdin.lock()), + Some(filename) => Box::new(BufReader::new(File::open(filename)?)), + }; - let highlighter = HighlightLines::new(syntax, theme); - match filename { - None => { - let stdin = io::stdin(); // TODO: this is not always needed - print_file_ranges( - printer, - stdin.lock(), - highlighter, - &printer.config.line_range, - )?; - } - Some(filename) => print_file_ranges( - printer, - BufReader::new(File::open(filename)?), - highlighter, - &printer.config.line_range, - )?, + let highlighter = HighlightLines::new(syntax, theme); + + printer.print_header(filename)?; + print_file_ranges(printer, reader, highlighter, &printer.config.line_range)?; + printer.print_footer()?; } - - printer.print_footer()?; Ok(()) } -fn print_file_ranges( +fn print_file_ranges<'a>( printer: &mut Printer, - mut reader: T, + mut reader: Box, mut highlighter: HighlightLines, line_ranges: &Option, ) -> Result<()> {