http_mini_lib/utils/
http_response.rs

1use std::io::Write;
2use std::net::TcpStream;
3
4const CRLF: &str = "\r\n";
5
6/// # Assembles headers
7fn 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
17/// # Send a response
18pub 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}