io_http/rfc9112/
request.rs1use alloc::{format, vec::Vec};
6
7use crate::{
8 rfc9110::{
9 chars::{CRLF, CRLF_CRLF, SP},
10 headers::CONTENT_LENGTH,
11 request::HttpRequest,
12 },
13 rfc9112::version::HTTP_11,
14};
15
16impl HttpRequest {
17 pub fn to_http_11_vec(&self) -> Vec<u8> {
20 let mut bytes = Vec::new();
21
22 bytes.extend(self.method.as_bytes());
23 bytes.push(SP);
24 bytes.extend(self.url.path().as_bytes());
25
26 if let Some(q) = self.url.query() {
27 bytes.extend(b"?");
28 bytes.extend(q.as_bytes());
29 }
30
31 bytes.push(SP);
32 bytes.extend(HTTP_11.as_bytes());
33 bytes.extend(CRLF);
34
35 for (key, val) in &self.headers {
36 if key.eq_ignore_ascii_case(CONTENT_LENGTH) {
37 continue;
38 }
39
40 bytes.extend(key.as_bytes());
41 bytes.extend(b": ");
42 bytes.extend(val.as_bytes());
43 bytes.extend(CRLF);
44 }
45
46 let body_len = format!("{}", self.body.len());
47 bytes.extend(CONTENT_LENGTH.as_bytes());
48 bytes.extend(b": ");
49 bytes.extend(body_len.as_bytes());
50 bytes.extend(CRLF_CRLF);
51 bytes.extend(&self.body);
52
53 bytes
54 }
55}