io_http/rfc1945/
request.rs1use alloc::{format, vec::Vec};
6
7use crate::{
8 rfc1945::version::HTTP_10,
9 rfc9110::{
10 chars::{CRLF, CRLF_CRLF, SP},
11 headers::CONTENT_LENGTH,
12 request::HttpRequest,
13 },
14};
15
16impl HttpRequest {
17 pub fn to_http_10_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_10.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}