@@ -7,29 +7,25 @@ const THEME_PREVIEW_FILE: &[u8] = include_bytes!("../assets/theme_preview.rs");
77
88pub struct InputFileReader<'a> {
99 inner: Box<dyn BufRead + 'a>,
10− buffer: Vec<u8>,
10+ pub first_line: Vec<u8>,
1111}
1212
1313impl<'a> InputFileReader<'a> {
14− fn new<R: BufRead + 'a>(reader: R) -> InputFileReader<'a> {
14+ fn new<R: BufRead + 'a>(mut reader: R) -> InputFileReader<'a> {
15+ let mut first_line = vec![];
16+ reader.read_until(b'\n', &mut first_line).ok();
17+
1518 InputFileReader {
1619 inner: Box::new(reader),
17− buffer: vec![],
20+ first_line,
1821 }
1922 }
2023
21− pub fn get_first_line(&mut self) -> io::Result<Vec<u8>> {
22− assert!(self.buffer.is_empty());
23−
24− self.inner.read_until(b'\n', &mut self.buffer)?;
25− Ok(self.buffer.clone())
26− }
27−
2824 pub fn read_line(&mut self, buf: &mut Vec<u8>) -> io::Result<bool> {
29− if self.buffer.is_empty() {
25+ if self.first_line.is_empty() {
3026 self.inner.read_until(b'\n', buf).map(|size| size > 0)
3127 } else {
32− buf.append(&mut self.buffer);
28+ buf.append(&mut self.first_line);
3329 return Ok(true);
3430 }
3531 }
@@ -65,9 +61,7 @@ fn basic() {
6561 let content = b"#!/bin/bash\necho hello";
6662 let mut reader = InputFileReader::new(&content[..]);
6763
68− let first_line = reader.get_first_line();
69− assert!(first_line.is_ok());
70− assert_eq!(b"#!/bin/bash\n", &first_line.unwrap()[..]);
64+ assert_eq!(b"#!/bin/bash\n", &reader.first_line[..]);
7165
7266 let mut buffer = vec![];
7367