From 00d20eb00799e091f522e72b8612a471a7635a69 Mon Sep 17 00:00:00 2001 From: David Pedersen Date: Sat, 14 Jan 2023 18:39:09 +0100 Subject: [PATCH] Simpify `parse-body-based-on-content-type` example (#1697) --- .../src/main.rs | 23 +++++++------------ 1 file changed, 8 insertions(+), 15 deletions(-) diff --git a/examples/parse-body-based-on-content-type/src/main.rs b/examples/parse-body-based-on-content-type/src/main.rs index 49c6d005..2e1222a7 100644 --- a/examples/parse-body-based-on-content-type/src/main.rs +++ b/examples/parse-body-based-on-content-type/src/main.rs @@ -39,32 +39,25 @@ async fn main() { .unwrap(); } -#[derive(Serialize, Deserialize)] +#[derive(Debug, Serialize, Deserialize)] struct Payload { foo: String, } -async fn handler(payload: JsonOrForm) -> Response { - match payload { - JsonOrForm::Json(payload) => Json(payload).into_response(), - JsonOrForm::Form(payload) => Form(payload).into_response(), - } +async fn handler(JsonOrForm(payload): JsonOrForm) { + dbg!(payload); } -enum JsonOrForm { - Json(T), - Form(K), -} +struct JsonOrForm(T); #[async_trait] -impl FromRequest for JsonOrForm +impl FromRequest for JsonOrForm where B: Send + 'static, S: Send + Sync, Json: FromRequest<(), B>, - Form: FromRequest<(), B>, + Form: FromRequest<(), B>, T: 'static, - U: 'static, { type Rejection = Response; @@ -75,12 +68,12 @@ where if let Some(content_type) = content_type { if content_type.starts_with("application/json") { let Json(payload) = req.extract().await.map_err(IntoResponse::into_response)?; - return Ok(Self::Json(payload)); + return Ok(Self(payload)); } if content_type.starts_with("application/x-www-form-urlencoded") { let Form(payload) = req.extract().await.map_err(IntoResponse::into_response)?; - return Ok(Self::Form(payload)); + return Ok(Self(payload)); } }