From 00a08a8bc91ee57f0453d49e2c6bd76ac965704b Mon Sep 17 00:00:00 2001 From: asonix Date: Thu, 22 Feb 2024 16:21:31 -0600 Subject: [PATCH] Improve AyncRead impl --- src/bytes_stream.rs | 27 ++++++++++++++------------- 1 file changed, 14 insertions(+), 13 deletions(-) diff --git a/src/bytes_stream.rs b/src/bytes_stream.rs index 9c62b5a..ac3a60c 100644 --- a/src/bytes_stream.rs +++ b/src/bytes_stream.rs @@ -110,25 +110,26 @@ impl Stream for IoStream { impl AsyncRead for BytesReader { fn poll_read( mut self: Pin<&mut Self>, - _cx: &mut Context<'_>, + _: &mut Context<'_>, buf: &mut tokio::io::ReadBuf<'_>, ) -> Poll> { while buf.remaining() > 0 { - if self.index == self.inner[0].len() { - self.inner.pop_front(); - self.index = 0; - } + if let Some(bytes) = self.inner.front() { + if self.index == bytes.len() { + self.inner.pop_front(); + self.index = 0; + continue; + } - if self.inner.is_empty() { + let upper_bound = (self.index + buf.remaining()).min(bytes.len()); + + let slice = &bytes[self.index..upper_bound]; + + buf.put_slice(slice); + self.index += slice.len(); + } else { break; } - - let upper_bound = (self.index + buf.remaining()).min(self.inner[0].len()); - - let slice = &self.inner[0][self.index..upper_bound]; - - buf.put_slice(slice); - self.index += slice.len(); } Poll::Ready(Ok(()))