rusty_http/
request.rs

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 {  }