little_hyper/
request.rs

1use crate::headers::Headers;
2use crate::path::PathData;
3use crate::path::path_regex::Params;
4use crate::query::QueryData;
5
6#[derive(Debug)]
7pub struct Request {
8    /// Method
9    ///
10    pub method: String,
11    /// Path
12    ///
13    pub path: String,
14    /// Pathname
15    ///
16    pub pathname: String,
17    /// Params
18    ///
19    /// TODO: delete this one, after PathExtractor ready.
20    pub params: Params,
21    /// Querystring
22    ///
23    pub querystring: String,
24    /// Query
25    ///
26    pub query: QueryData,
27    /// Http Version
28    ///
29    pub version: String,
30    /// Headers
31    ///
32    pub headers: Headers,
33    /// Body
34    ///
35    pub body: String,
36}
37
38impl From<Vec<String>> for Request {
39    fn from(value: Vec<String>) -> Self {
40        let heading_info = value[0].split(' ').collect::<Vec<&str>>();
41
42        let PathData {
43            path,
44            pathname,
45            querystring,
46            query,
47        } = PathData::new(heading_info[1]);
48
49        let body = "".to_string();
50
51        Request {
52            method: heading_info[0].to_string(),
53            version: heading_info[2].to_string(),
54            path,
55            pathname,
56            params: Params::new(),
57            query,
58            querystring,
59            headers: Headers::from(&value[1..]),
60            body,
61        }
62    }
63}