http_mini_lib/utils/
http_response.rs1use std::io::Write;
2use std::net::TcpStream;
3
4const CRLF: &str = "\r\n";
5
6fn build_headers(headers: Vec<(String, String)>, content_length: usize) -> String {
8 let mut result = String::new();
9 for (key, value) in headers {
10 result = format!("{}{}: {}\n", result, key, value);
11 }
12
13 result = format!("{}{}: {}\n", result, "Content-Length", content_length);
14 result
15}
16
17pub fn send(
19 mut stream: &TcpStream,
20 status_line: &str,
21 headers: Option<Vec<(String, String)>>,
22 contents_option: Option<Vec<u8>>,
23) {
24 let contents = contents_option.unwrap_or(Vec::from(""));
25 let content_length = contents.len();
26 let headers_content = build_headers(headers.unwrap_or_default(), content_length);
27
28 let response = format!("{status_line}{CRLF}{headers_content}{CRLF}");
29
30 stream.write_all(response.as_bytes()).unwrap();
31 stream.write_all(&contents).unwrap();
32 stream.flush().unwrap();
33}