blob: 286efa3b150910912b3f3936fbc834c27d09d6aa (
plain)
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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
|
use super::{method::Method, uri::URI, header::HeaderMap};
#[derive(Debug, Clone)]
pub struct Request {
pub method: Method,
pub uri: URI,
pub headers: HeaderMap,
pub body: Option<String>
}
impl Request {
pub fn serialize(req: &str) -> Option<Self> {
let mut lines = req.split('\n').to_owned();
let Some(head) = lines.next() else {
eprintln!("missing head str");
return None
};
let mut parts = head.trim().split(" ");
let Some(method_str) = parts.next() else {
eprintln!("missing method str");
return None
};
let Some(method) = Method::serialize(method_str.trim()) else {
eprintln!("invalid http method");
return None
};
let Some(uri_str) = parts.next() else {
eprintln!("missing uri str");
return None
};
let Some(uri) = URI::serialize(uri_str.trim()) else {
eprintln!("invalid http uri");
return None
};
let mut headers = HeaderMap::new();
headers.serialize(&mut lines);
let body: String = lines.collect();
Some(Self {
method,
uri,
headers,
body: if body.len() > 0 { Some(body) } else { None },
})
}
}
|