From f9b20477823b6b3182e5a4c73a58829933b9daba Mon Sep 17 00:00:00 2001 From: fakeshadow <24548779@qq.com> Date: Tue, 26 Jan 2021 18:50:16 -0800 Subject: [PATCH] remove extra branch on enabled response timeout --- awc/src/response.rs | 27 +++++++++++---------------- 1 file changed, 11 insertions(+), 16 deletions(-) diff --git a/awc/src/response.rs b/awc/src/response.rs index 8549a9760..0a6bbcd52 100644 --- a/awc/src/response.rs +++ b/awc/src/response.rs @@ -31,7 +31,7 @@ pub struct ClientResponse { /// See `ClientResponse::_timeout` for reason. pub(crate) enum ResponseTimeout { Disabled(Option>>), - Enabled(Option>>), + Enabled(Pin>), } impl Default for ResponseTimeout { @@ -43,24 +43,19 @@ impl Default for ResponseTimeout { impl ResponseTimeout { fn poll_timeout(&mut self, cx: &mut Context<'_>) -> Result<(), PayloadError> { match *self { - Self::Disabled(_) => Ok(()), - Self::Enabled(Some(ref mut timeout)) => { + Self::Enabled(ref mut timeout) => { if timeout.as_mut().poll(cx).is_ready() { - Err(Self::err()) + Err(PayloadError::Io(io::Error::new( + io::ErrorKind::TimedOut, + "Response Payload IO timed out", + ))) } else { Ok(()) } } - Self::Enabled(None) => Err(Self::err()), + Self::Disabled(_) => Ok(()), } } - - fn err() -> PayloadError { - PayloadError::Io(io::Error::new( - io::ErrorKind::TimedOut, - "Response Payload IO timed out", - )) - } } impl HttpMessage for ClientResponse { @@ -158,16 +153,16 @@ impl ClientResponse { pub fn timeout(self, dur: Duration) -> Self { let timeout = match self.timeout { ResponseTimeout::Disabled(Some(mut timeout)) - | ResponseTimeout::Enabled(Some(mut timeout)) => { + | ResponseTimeout::Enabled(mut timeout) => { match Instant::now().checked_add(dur) { Some(deadline) => { timeout.as_mut().reset(deadline.into()); - ResponseTimeout::Enabled(Some(timeout)) + ResponseTimeout::Enabled(timeout) } - None => ResponseTimeout::Enabled(Some(Box::pin(sleep(dur)))), + None => ResponseTimeout::Enabled(Box::pin(sleep(dur))), } } - _ => ResponseTimeout::Enabled(Some(Box::pin(sleep(dur)))), + _ => ResponseTimeout::Enabled(Box::pin(sleep(dur))), }; Self {