monoio_http/common/
request.rs

1pub use http::request::{Builder as RequestBuilder, Parts as RequestHead};
2
3use super::BorrowHeaderMap;
4use crate::{
5    common::{FromParts, IntoParts},
6    h1::payload::Payload,
7};
8
9pub type Request<P = Payload> = http::request::Request<P>;
10
11impl<P> FromParts<RequestHead, P> for Request<P> {
12    #[inline]
13    fn from_parts(parts: RequestHead, body: P) -> Self {
14        Self::from_parts(parts, body)
15    }
16}
17
18impl<P> IntoParts for Request<P> {
19    type Parts = RequestHead;
20    type Body = P;
21    #[inline]
22    fn into_parts(self) -> (Self::Parts, Self::Body) {
23        self.into_parts()
24    }
25}
26
27pub struct RequestHeadRef<'a> {
28    pub method: &'a http::Method,
29    pub uri: &'a http::Uri,
30    pub version: http::Version,
31    pub headers: &'a http::HeaderMap,
32}
33
34impl<'a> RequestHeadRef<'a> {
35    #[inline]
36    pub fn from_http<B>(req: &'a http::Request<B>) -> Self {
37        Self {
38            method: req.method(),
39            uri: req.uri(),
40            version: req.version(),
41            headers: req.headers(),
42        }
43    }
44}
45
46pub struct RequestRef<'a, B = Payload> {
47    pub parts: RequestHeadRef<'a>,
48    pub body: B,
49}
50
51impl<'a, B> FromParts<RequestHeadRef<'a>, B> for RequestRef<'a, B> {
52    #[inline]
53    fn from_parts(parts: RequestHeadRef<'a>, body: B) -> Self {
54        Self { parts, body }
55    }
56}
57
58impl<'a, B> IntoParts for RequestRef<'a, B> {
59    type Parts = RequestHeadRef<'a>;
60    type Body = B;
61    #[inline]
62    fn into_parts(self) -> (Self::Parts, Self::Body) {
63        (self.parts, self.body)
64    }
65}
66
67impl BorrowHeaderMap for RequestHead {
68    #[inline]
69    fn header_map(&self) -> &http::HeaderMap {
70        &self.headers
71    }
72}