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 pub method: String,
11 pub path: String,
14 pub pathname: String,
17 pub params: Params,
21 pub querystring: String,
24 pub query: QueryData,
27 pub version: String,
30 pub headers: Headers,
33 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}