diff --git a/src/futures/bufread/generic/decoder.rs b/src/futures/bufread/generic/decoder.rs index a3a968a7..60b0f69a 100644 --- a/src/futures/bufread/generic/decoder.rs +++ b/src/futures/bufread/generic/decoder.rs @@ -84,20 +84,20 @@ impl Decoder { State::Flushing } else { let mut input = PartialBuffer::new(input); - let done = this.decoder.decode(&mut input, output).or_else(|err| { + let done = match this.decoder.decode(&mut input, output) { + Ok(done) => { + let consumed = input.written().len(); + this.reader.as_mut().consume(consumed); + done + } // ignore the first error, occurs when input is empty // but we need to run decode to flush - if first { - Ok(false) - } else { - Err(err) - } - })?; + Err(err) if first => false, + Err(err) => return Poll::Ready(Err(err)), + }; first = false; - let len = input.written().len(); - this.reader.as_mut().consume(len); if done { State::Flushing } else { diff --git a/src/tokio/bufread/generic/decoder.rs b/src/tokio/bufread/generic/decoder.rs index aa568f4f..c5c16d18 100644 --- a/src/tokio/bufread/generic/decoder.rs +++ b/src/tokio/bufread/generic/decoder.rs @@ -84,20 +84,20 @@ impl Decoder { State::Flushing } else { let mut input = PartialBuffer::new(input); - let done = this.decoder.decode(&mut input, output).or_else(|err| { + let done = match this.decoder.decode(&mut input, output) { + Ok(done) => { + let consumed = input.written().len(); + this.reader.as_mut().consume(consumed); + done + } // ignore the first error, occurs when input is empty // but we need to run decode to flush - if first { - Ok(false) - } else { - Err(err) - } - })?; + Err(err) if first => false, + Err(err) => return Poll::Ready(Err(err)), + }; first = false; - let len = input.written().len(); - this.reader.as_mut().consume(len); if done { State::Flushing } else {