async_compression/tokio/bufread/generic/
mod.rs1mod decoder;
2mod encoder;
3
4pub use self::{decoder::Decoder, encoder::Encoder};
5
6use crate::core::util::WriteBuffer;
7use std::{io::Result, task::Poll};
8use tokio::io::ReadBuf;
9
10fn poll_read(
11 buf: &mut ReadBuf<'_>,
12 do_poll_read: impl FnOnce(&mut WriteBuffer<'_>) -> Poll<Result<()>>,
13) -> Poll<Result<()>> {
14 if buf.remaining() == 0 {
15 return Poll::Ready(Ok(()));
16 }
17
18 let initialized = buf.initialized().len() - buf.filled().len();
19 let mut output = WriteBuffer::new_uninitialized(unsafe { buf.unfilled_mut() });
21 unsafe { output.assume_init(initialized) };
23
24 let res = do_poll_read(&mut output);
25
26 let initialized = output.initialized_len();
27 let written = output.written_len();
28
29 unsafe { buf.assume_init(initialized) };
31 buf.advance(written);
32
33 res
34}