| 680 | |
| 681 | impl<S: AsyncRead + Unpin> AsyncRead for StreamWithBuffer<S> { |
| 682 | fn poll_read( |
| 683 | mut self: Pin<&mut Self>, |
| 684 | cx: &mut Context<'_>, |
| 685 | buf: &mut ReadBuf<'_>, |
| 686 | ) -> Poll<std::io::Result<()>> { |
| 687 | // First, drain any buffered data |
| 688 | if !self.buffer.is_empty() { |
| 689 | let len = std::cmp::min(buf.remaining(), self.buffer.len()); |
| 690 | buf.put_slice(&self.buffer[..len]); |
| 691 | self.buffer.advance(len); |
| 692 | return Poll::Ready(Ok(())); |
| 693 | } |
| 694 | |
| 695 | // Then read from the underlying stream |
| 696 | Pin::new(&mut self.stream).poll_read(cx, buf) |
| 697 | } |
| 698 | } |
| 699 | |
| 700 | impl<S: AsyncWrite + Unpin> AsyncWrite for StreamWithBuffer<S> { |