From ae35e69382805164704d8d7c79f41c85089b3d36 Mon Sep 17 00:00:00 2001
From: Rob Ede <robjtede@icloud.com>
Date: Tue, 31 Aug 2021 02:52:29 +0100
Subject: [PATCH] use rust 1.51 features

---
 Cargo.toml                           |  1 +
 actix-http/src/body/body.rs          | 24 +++++++++---------------
 actix-http/src/body/response_body.rs |  9 ++-------
 actix-http/src/encoding/encoder.rs   | 13 ++-----------
 actix-http/src/h1/utils.rs           |  5 +----
 src/middleware/logger.rs             |  1 -
 6 files changed, 15 insertions(+), 38 deletions(-)

diff --git a/Cargo.toml b/Cargo.toml
index f2ce46ee1..cee401363 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -24,6 +24,7 @@ name = "actix_web"
 path = "src/lib.rs"
 
 [workspace]
+resolver = "2"
 members = [
     ".",
     "awc",
diff --git a/actix-http/src/body/body.rs b/actix-http/src/body/body.rs
index f04837d07..cd3e4c5c4 100644
--- a/actix-http/src/body/body.rs
+++ b/actix-http/src/body/body.rs
@@ -7,7 +7,7 @@ use std::{
 };
 
 use bytes::{Bytes, BytesMut};
-use futures_core::{ready, Stream};
+use futures_core::Stream;
 
 use crate::error::Error;
 
@@ -74,14 +74,10 @@ impl MessageBody for AnyBody {
                 }
             }
 
-            // TODO: MSRV 1.51: poll_map_err
-            AnyBody::Message(body) => match ready!(body.as_pin_mut().poll_next(cx)) {
-                Some(Err(err)) => {
-                    Poll::Ready(Some(Err(Error::new_body().with_cause(err))))
-                }
-                Some(Ok(val)) => Poll::Ready(Some(Ok(val))),
-                None => Poll::Ready(None),
-            },
+            AnyBody::Message(body) => body
+                .as_pin_mut()
+                .poll_next(cx)
+                .map_err(|err| Error::new_body().with_cause(err)),
         }
     }
 }
@@ -223,11 +219,9 @@ impl MessageBody for BoxAnyBody {
         mut self: Pin<&mut Self>,
         cx: &mut Context<'_>,
     ) -> Poll<Option<Result<Bytes, Self::Error>>> {
-        // TODO: MSRV 1.51: poll_map_err
-        match ready!(self.0.as_mut().poll_next(cx)) {
-            Some(Err(err)) => Poll::Ready(Some(Err(Error::new_body().with_cause(err)))),
-            Some(Ok(val)) => Poll::Ready(Some(Ok(val))),
-            None => Poll::Ready(None),
-        }
+        self.0
+            .as_mut()
+            .poll_next(cx)
+            .map_err(|err| Error::new_body().with_cause(err))
     }
 }
diff --git a/actix-http/src/body/response_body.rs b/actix-http/src/body/response_body.rs
index 855c742f2..699ea9384 100644
--- a/actix-http/src/body/response_body.rs
+++ b/actix-http/src/body/response_body.rs
@@ -5,7 +5,7 @@ use std::{
 };
 
 use bytes::Bytes;
-use futures_core::{ready, Stream};
+use futures_core::Stream;
 use pin_project::pin_project;
 
 use crate::error::Error;
@@ -77,12 +77,7 @@ where
         cx: &mut Context<'_>,
     ) -> Poll<Option<Self::Item>> {
         match self.project() {
-            // TODO: MSRV 1.51: poll_map_err
-            ResponseBodyProj::Body(body) => match ready!(body.poll_next(cx)) {
-                Some(Err(err)) => Poll::Ready(Some(Err(err.into()))),
-                Some(Ok(val)) => Poll::Ready(Some(Ok(val))),
-                None => Poll::Ready(None),
-            },
+            ResponseBodyProj::Body(body) => body.poll_next(cx).map_err(Into::into),
             ResponseBodyProj::Other(body) => Pin::new(body).poll_next(cx),
         }
     }
diff --git a/actix-http/src/encoding/encoder.rs b/actix-http/src/encoding/encoder.rs
index 1e69990a0..c39c0e888 100644
--- a/actix-http/src/encoding/encoder.rs
+++ b/actix-http/src/encoding/encoder.rs
@@ -131,18 +131,9 @@ where
                     Poll::Ready(Some(Ok(std::mem::take(b))))
                 }
             }
-            // TODO: MSRV 1.51: poll_map_err
-            EncoderBodyProj::Stream(b) => match ready!(b.poll_next(cx)) {
-                Some(Err(err)) => Poll::Ready(Some(Err(EncoderError::Body(err)))),
-                Some(Ok(val)) => Poll::Ready(Some(Ok(val))),
-                None => Poll::Ready(None),
-            },
+            EncoderBodyProj::Stream(b) => b.poll_next(cx).map_err(EncoderError::Body),
             EncoderBodyProj::BoxedStream(ref mut b) => {
-                match ready!(b.as_pin_mut().poll_next(cx)) {
-                    Some(Err(err)) => Poll::Ready(Some(Err(EncoderError::Boxed(err)))),
-                    Some(Ok(val)) => Poll::Ready(Some(Ok(val))),
-                    None => Poll::Ready(None),
-                }
+                b.as_pin_mut().poll_next(cx).map_err(EncoderError::Boxed)
             }
         }
     }
diff --git a/actix-http/src/h1/utils.rs b/actix-http/src/h1/utils.rs
index 523e652fd..5fd3cc21c 100644
--- a/actix-http/src/h1/utils.rs
+++ b/actix-http/src/h1/utils.rs
@@ -63,12 +63,9 @@ where
                         .is_write_buf_full()
                 {
                     let next =
-                        // TODO: MSRV 1.51: poll_map_err
                         match this.body.as_mut().as_pin_mut().unwrap().poll_next(cx) {
                             Poll::Ready(Some(Ok(item))) => Poll::Ready(Some(item)),
-                            Poll::Ready(Some(Err(err))) => {
-                                return Poll::Ready(Err(err.into()))
-                            }
+                            Poll::Ready(Some(Err(err))) => return Poll::Ready(Err(err.into())),
                             Poll::Ready(None) => Poll::Ready(None),
                             Poll::Pending => Poll::Pending,
                         };
diff --git a/src/middleware/logger.rs b/src/middleware/logger.rs
index 0f09b6ad6..9574b02f7 100644
--- a/src/middleware/logger.rs
+++ b/src/middleware/logger.rs
@@ -341,7 +341,6 @@ where
     ) -> Poll<Option<Result<Bytes, Self::Error>>> {
         let this = self.project();
 
-        // TODO: MSRV 1.51: poll_map_err
         match ready!(this.body.poll_next(cx)) {
             Some(Ok(chunk)) => {
                 *this.size += chunk.len();