1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
use std::collections::HashMap;

use crate::func::hashmapper::hashmapify_headers;
use super::req::Request;

pub fn parse_request_header(header: String) -> Request{
    let body_split: Vec<&str> = header.split("\r\n\r\n").collect();

    let request_header: String = String::from(body_split[0]);
    let mut request_body: String = String::from("");

    if body_split.len() > 1{
        request_body = String::from(body_split[1]);
    }

    let mut raw_headers: Vec<&str> = request_header.split("\r\n").collect();
    let raw_title_header: &str = raw_headers[0];

    raw_headers.remove(0);

    let raw_title_header_string: String = String::from(raw_title_header);
    let title_header: Vec<&str> = raw_title_header_string.split(" ").collect();

    let method: String = String::from(title_header[0]);
    let mut path: String = String::from("");

    if title_header.len() > 1{
        path = String::from(title_header[1]);
    }

    let hashmapped_headers: HashMap<String, String> = hashmapify_headers(raw_headers);

    return Request { 
        method: method, 
        path: path, 
        body: request_body, 
        headers: hashmapped_headers
    };
}