in core/src/raw/http_util/body.rs [143:166]
fn poll_read(&mut self, cx: &mut Context<'_>, mut buf: &mut [u8]) -> Poll<Result<usize>> {
if buf.is_empty() {
return Poll::Ready(Ok(0));
}
// We must get a valid bytes from underlying stream
let mut bs = loop {
match ready!(self.poll_next(cx)) {
Some(Ok(bs)) if bs.is_empty() => continue,
Some(Ok(bs)) => break bs,
Some(Err(err)) => return Poll::Ready(Err(err)),
None => return Poll::Ready(Ok(0)),
}
};
let amt = min(bs.len(), buf.len());
buf.put_slice(&bs[..amt]);
bs.advance(amt);
if !bs.is_empty() {
self.chunk = Some(bs);
}
Poll::Ready(Ok(amt))
}