servme/src/requester.rs

23 lines
628 B
Rust
Raw Normal View History

2025-01-18 21:27:14 +01:00
use http::Request;
use http_body_util::BodyExt;
use hyper::body::Incoming;
use serde::de::DeserializeOwned;
2025-01-23 17:02:27 +01:00
use std::{any::TypeId, error::Error};
2025-01-18 21:27:14 +01:00
pub struct Requester;
impl Requester {
2025-01-18 21:35:15 +01:00
pub async fn extract_body<T>(req: Request<Incoming>) -> Result<T, Box<dyn Error + Send + Sync>>
2025-01-18 21:27:14 +01:00
where
2025-01-23 17:02:27 +01:00
T: DeserializeOwned + 'static,
2025-01-18 21:27:14 +01:00
{
let body = req.collect().await?.to_bytes();
2025-01-23 17:02:27 +01:00
if TypeId::of::<T>() == TypeId::of::<String>() {
let string = String::from_utf8(body.to_vec())?;
return Ok(serde_json::from_str(&string)?);
}
2025-01-18 21:27:14 +01:00
Ok(serde_json::from_slice(&body)?)
}
}