@@ -86,25 +86,26 @@ fn print_file(
8686 printer: &mut Printer,
8787 filename: Option<&str>,
8888) -> Result<()> {
89− let stdin = io::stdin(); // TODO: this is not always needed
90− {
91− let reader: Box<BufRead> = match filename {
92− None => Box::new(stdin.lock()),
93− Some(filename) => Box::new(BufReader::new(File::open(filename)?)),
94− };
95−
96− let highlighter = HighlightLines::new(syntax, theme);
97−
98− printer.print_header(filename)?;
99− print_file_ranges(printer, reader, highlighter, &printer.config.line_range)?;
100− printer.print_footer()?;
89+ printer.print_header(filename)?;
90+
91+ let highlighter = HighlightLines::new(syntax, theme);
92+ match filename {
93+ None => {
94+ let stdin = io::stdin(); // TODO: this is not always needed
95+ print_file_ranges(printer, stdin.lock(), highlighter, &printer.config.line_range)?;
96+ },
97+ Some(filename) => {
98+ print_file_ranges(printer, BufReader::new(File::open(filename)?), highlighter, &printer.config.line_range)?
99+ },
101100 }
101+
102+ printer.print_footer()?;
102103 Ok(())
103104}
104105
105−fn print_file_ranges<'a>(
106+fn print_file_ranges<T: BufRead>(
106107 printer: &mut Printer,
107− mut reader: Box<BufRead + 'a>,
108+ mut reader: T,
108109 mut highlighter: HighlightLines,
109110 line_ranges: &Option<LineRange>,
110111) -> Result<()> {