From 7a9325b7dfb7a2a2285ed459465b58f540a1f11f Mon Sep 17 00:00:00 2001 From: Max Verevkin Date: Sat, 23 Apr 2022 12:34:22 +0300 Subject: refactor --- src/status_cmd.rs | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) (limited to 'src/status_cmd.rs') diff --git a/src/status_cmd.rs b/src/status_cmd.rs index 9824be4..7cbdead 100644 --- a/src/status_cmd.rs +++ b/src/status_cmd.rs @@ -14,6 +14,7 @@ pub struct StatusCmd { output: BufReader, input: ChildStdin, protocol: Protocol, + buf: Vec, } impl StatusCmd { @@ -30,12 +31,27 @@ impl StatusCmd { output: BufReader::new(output), input, protocol: Protocol::Unknown, + buf: Vec::new(), }) } pub fn notify_available(&mut self) -> Result>> { let buf = self.output.fill_buf()?; - self.protocol.process_new_bytes(buf)?; + if self.buf.is_empty() { + let rem = self.protocol.process_new_bytes(buf)?; + if !rem.is_empty() { + self.buf.extend_from_slice(rem); + } + } else { + self.buf.extend_from_slice(buf); + let rem = self.protocol.process_new_bytes(&self.buf)?; + if rem.is_empty() { + self.buf.clear(); + } else { + let used = self.buf.len() - rem.len(); + self.buf.drain(..used); + } + } let consumed = buf.len(); self.output.consume(consumed); Ok(self.protocol.get_blocks()) -- cgit v1.3.1