1use std::collections::HashMap;
2use std::net::TcpStream;
3
4use crate::http_buffer_reader::HttpBufferReader;
5use crate::method::Method;
6use crate::parse::parse_body;
7use crate::parse::parse_headers;
8use crate::parse::parse_method;
9use crate::parse::parse_request_line;
10use crate::parse::parse_url;
11
12#[derive(Debug)]
13pub struct Request {
14 pub uri: String,
15 pub body: String,
16 pub method: Method,
17 pub params: HashMap<String, String>,
18 pub headers: HashMap<String, String>,
19 pub http_version: String
20}
21
22impl Request {
23 pub fn new(stream: TcpStream) -> Request {
24 let mut loader = HttpBufferReader::new(stream);
25
26 let buffer = loader.load_as_string();
27
28 let (method_str, url_str, http_version) = parse_request_line(&buffer);
29 let (uri, params) = parse_url(&url_str);
30 let method = parse_method(&method_str);
31 let headers = parse_headers(&mut loader);
32 let body = parse_body(&mut loader, &headers);
33
34 Request {
35 http_version,
36 uri,
37 params,
38 method,
39 headers,
40 body
41 }
42 }
43}
44
45unsafe impl Send for Request { }
46unsafe impl Sync for Request { }