monoio_http/common/
request.rs1pub 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}