From 6d1cc8c2c8bc2bea6d381fd6ec4a29f66dde8699 Mon Sep 17 00:00:00 2001 From: sharkdp Date: Sun, 7 Oct 2018 12:15:49 +0200 Subject: [PATCH] Move read_line functionality to inputfile module --- src/controller.rs | 8 ++++---- src/inputfile.rs | 24 ++++++++++++++++++++---- 2 files changed, 24 insertions(+), 8 deletions(-) diff --git a/src/controller.rs b/src/controller.rs index 532a0f0d..da9b710e 100644 --- a/src/controller.rs +++ b/src/controller.rs @@ -1,9 +1,9 @@ -use std::io::{self, BufRead, Write}; +use std::io::{self, Write}; use app::Config; use assets::HighlightingAssets; use errors::*; -use inputfile::InputFile; +use inputfile::{InputFile, InputFileReader}; use line_range::LineRange; use output::OutputType; use printer::{InteractivePrinter, Printer, SimplePrinter}; @@ -61,14 +61,14 @@ impl<'b> Controller<'b> { &self, printer: &mut P, writer: &mut Write, - mut reader: Box, + mut reader: InputFileReader, line_ranges: &Option, ) -> Result<()> { let mut line_buffer = Vec::new(); let mut line_number: usize = 1; - while reader.read_until(b'\n', &mut line_buffer)? > 0 { + while reader.read_line(&mut line_buffer)? { match line_ranges { &Some(ref range) => { if line_number < range.lower { diff --git a/src/inputfile.rs b/src/inputfile.rs index 07d68a34..f8dbb8ff 100644 --- a/src/inputfile.rs +++ b/src/inputfile.rs @@ -5,6 +5,22 @@ use errors::*; const THEME_PREVIEW_FILE: &[u8] = include_bytes!("../assets/theme_preview.rs"); +pub struct InputFileReader<'a> { + inner: Box, +} + +impl<'a> InputFileReader<'a> { + fn new(reader: R) -> InputFileReader<'a> { + InputFileReader { + inner: Box::new(reader), + } + } + + pub fn read_line(&mut self, buf: &mut Vec) -> io::Result { + self.inner.read_until(b'\n', buf).map(|size| size > 0) + } +} + #[derive(Debug, Clone, Copy, PartialEq)] pub enum InputFile<'a> { StdIn, @@ -13,9 +29,9 @@ pub enum InputFile<'a> { } impl<'a> InputFile<'a> { - pub fn get_reader(&self, stdin: &'a io::Stdin) -> Result> { + pub fn get_reader(&self, stdin: &'a io::Stdin) -> Result { match self { - InputFile::StdIn => Ok(Box::new(stdin.lock())), + InputFile::StdIn => Ok(InputFileReader::new(stdin.lock())), InputFile::Ordinary(filename) => { let file = File::open(filename)?; @@ -23,9 +39,9 @@ impl<'a> InputFile<'a> { return Err(format!("'{}' is a directory.", filename).into()); } - Ok(Box::new(BufReader::new(file))) + Ok(InputFileReader::new(BufReader::new(file))) } - InputFile::ThemePreviewFile => Ok(Box::new(THEME_PREVIEW_FILE)), + InputFile::ThemePreviewFile => Ok(InputFileReader::new(THEME_PREVIEW_FILE)), } } }