De-duplicate Body::poll_next and poll_data
This commit is contained in:
@@ -259,30 +259,8 @@ impl HttpBody for ImplStream {
|
|||||||
impl Stream for ImplStream {
|
impl Stream for ImplStream {
|
||||||
type Item = Result<Bytes, crate::Error>;
|
type Item = Result<Bytes, crate::Error>;
|
||||||
|
|
||||||
fn poll_next(mut self: Pin<&mut Self>, cx: &mut Context) -> Poll<Option<Self::Item>> {
|
fn poll_next(self: Pin<&mut Self>, cx: &mut Context) -> Poll<Option<Self::Item>> {
|
||||||
let opt_try_chunk = match self.0.inner {
|
self.poll_data(cx)
|
||||||
Inner::Streaming {
|
|
||||||
ref mut body,
|
|
||||||
ref mut timeout,
|
|
||||||
} => {
|
|
||||||
if let Some(ref mut timeout) = timeout {
|
|
||||||
if let Poll::Ready(()) = Pin::new(timeout).poll(cx) {
|
|
||||||
return Poll::Ready(Some(Err(crate::error::body(crate::error::TimedOut))));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
futures_core::ready!(Pin::new(body).poll_data(cx))
|
|
||||||
.map(|opt_chunk| opt_chunk.map(Into::into).map_err(crate::error::body))
|
|
||||||
}
|
|
||||||
Inner::Reusable(ref mut bytes) => {
|
|
||||||
if bytes.is_empty() {
|
|
||||||
None
|
|
||||||
} else {
|
|
||||||
Some(Ok(std::mem::replace(bytes, Bytes::new())))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
Poll::Ready(opt_try_chunk)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user