diff --git a/src/requester.rs b/src/requester.rs index 5de29a4..22b30ee 100644 --- a/src/requester.rs +++ b/src/requester.rs @@ -2,16 +2,21 @@ use http::Request; use http_body_util::BodyExt; use hyper::body::Incoming; use serde::de::DeserializeOwned; -use std::error::Error; +use std::{any::TypeId, error::Error}; pub struct Requester; impl Requester { pub async fn extract_body(req: Request) -> Result> where - T: DeserializeOwned, + T: DeserializeOwned + 'static, { let body = req.collect().await?.to_bytes(); + if TypeId::of::() == TypeId::of::() { + let string = String::from_utf8(body.to_vec())?; + return Ok(serde_json::from_str(&string)?); + } + Ok(serde_json::from_slice(&body)?) } }