From 455fc46bf333185aafcf1796bf0542d038052e7f Mon Sep 17 00:00:00 2001 From: Nylonicious <50183564+nylonicious@users.noreply.github.com> Date: Tue, 21 Dec 2021 10:51:47 +0100 Subject: [PATCH] Change error type for `RequestParts::try_into_request` (#639) --- axum-core/src/error.rs | 10 ---------- axum-core/src/extract/mod.rs | 15 +++++++-------- axum-core/src/extract/request_parts.rs | 13 +------------ 3 files changed, 8 insertions(+), 30 deletions(-) diff --git a/axum-core/src/error.rs b/axum-core/src/error.rs index 93e5295f..f5788034 100644 --- a/axum-core/src/error.rs +++ b/axum-core/src/error.rs @@ -14,16 +14,6 @@ impl Error { inner: error.into(), } } - - pub(crate) fn downcast(self) -> Result - where - T: StdError + 'static, - { - match self.inner.downcast::() { - Ok(t) => Ok(*t), - Err(err) => Err(*err.downcast().unwrap()), - } - } } impl fmt::Display for Error { diff --git a/axum-core/src/extract/mod.rs b/axum-core/src/extract/mod.rs index c3951a67..6a4d2662 100644 --- a/axum-core/src/extract/mod.rs +++ b/axum-core/src/extract/mod.rs @@ -6,7 +6,6 @@ use self::rejection::*; use crate::response::IntoResponse; -use crate::Error; use async_trait::async_trait; use http::{Extensions, HeaderMap, Method, Request, Uri, Version}; use std::convert::Infallible; @@ -128,7 +127,7 @@ impl RequestParts { /// [`take_headers`]: RequestParts::take_headers /// [`take_extensions`]: RequestParts::take_extensions /// [`take_body`]: RequestParts::take_body - pub fn try_into_request(self) -> Result, Error> { + pub fn try_into_request(self) -> Result, RequestAlreadyExtracted> { let Self { method, uri, @@ -141,9 +140,9 @@ impl RequestParts { let mut req = if let Some(body) = body.take() { Request::new(body) } else { - return Err(Error::new(RequestAlreadyExtracted::BodyAlreadyExtracted( + return Err(RequestAlreadyExtracted::BodyAlreadyExtracted( BodyAlreadyExtracted, - ))); + )); }; *req.method_mut() = method; @@ -153,16 +152,16 @@ impl RequestParts { if let Some(headers) = headers.take() { *req.headers_mut() = headers; } else { - return Err(Error::new( - RequestAlreadyExtracted::HeadersAlreadyExtracted(HeadersAlreadyExtracted), + return Err(RequestAlreadyExtracted::HeadersAlreadyExtracted( + HeadersAlreadyExtracted, )); } if let Some(extensions) = extensions.take() { *req.extensions_mut() = extensions; } else { - return Err(Error::new( - RequestAlreadyExtracted::ExtensionsAlreadyExtracted(ExtensionsAlreadyExtracted), + return Err(RequestAlreadyExtracted::ExtensionsAlreadyExtracted( + ExtensionsAlreadyExtracted, )); } diff --git a/axum-core/src/extract/request_parts.rs b/axum-core/src/extract/request_parts.rs index 4752a8d7..8116dc71 100644 --- a/axum-core/src/extract/request_parts.rs +++ b/axum-core/src/extract/request_parts.rs @@ -25,18 +25,7 @@ where }, ); - let err = match req.try_into_request() { - Ok(req) => return Ok(req), - Err(err) => err, - }; - - match err.downcast::() { - Ok(err) => return Err(err), - Err(err) => unreachable!( - "Unexpected error type from `try_into_request`: `{:?}`. This is a bug in axum, please file an issue", - err, - ), - } + req.try_into_request() } }