object_storage/oss/util/
headers.rs

1use reqwest::header::{
2    HeaderMap, HeaderName, HeaderValue, AUTHORIZATION, CONTENT_LENGTH, CONTENT_TYPE, DATE, HOST,
3};
4
5/// create request header
6pub async fn construct_headers(
7    content_md5: Option<&str>,
8    contest_length: Option<&str>,
9    contest_type: Option<&str>,
10    host: &str,
11    date: &str,
12    authorization: &str,
13) -> HeaderMap {
14    let mut headers = HeaderMap::new();
15    insert_header_if_present(&mut headers, CONTENT_LENGTH, contest_length).await;
16    insert_header_if_present(&mut headers, CONTENT_TYPE, contest_type).await;
17    insert_header_if_present(
18        &mut headers,
19        HeaderName::from_static("content-md5"),
20        content_md5,
21    )
22    .await;
23    insert_header(&mut headers, AUTHORIZATION, authorization);
24    insert_header(&mut headers, HOST, host);
25    insert_header(&mut headers, DATE, date);
26    headers
27}
28
29async fn insert_header_if_present(
30    headers: &mut HeaderMap,
31    header_name: HeaderName,
32    header_value: Option<&str>,
33) {
34    if let Some(header_value) = header_value {
35        insert_header(headers, header_name, header_value);
36    }
37}
38
39fn insert_header(headers: &mut HeaderMap, header_name: HeaderName, header_value: &str) {
40    headers.insert(header_name, HeaderValue::from_str(header_value).unwrap());
41}