multer/
helpers.rs

1use std::convert::TryFrom;
2
3use http::header::{self, HeaderMap, HeaderName, HeaderValue};
4use httparse::Header;
5
6pub(crate) fn convert_raw_headers_to_header_map(raw_headers: &[Header<'_>]) -> crate::Result<HeaderMap> {
7    let mut headers = HeaderMap::with_capacity(raw_headers.len());
8
9    for raw_header in raw_headers {
10        let name = HeaderName::try_from(raw_header.name).map_err(|err| crate::Error::DecodeHeaderName {
11            name: raw_header.name.to_owned(),
12            cause: err.into(),
13        })?;
14
15        let value = HeaderValue::try_from(raw_header.value).map_err(|err| crate::Error::DecodeHeaderValue {
16            value: raw_header.value.to_owned(),
17            cause: err.into(),
18        })?;
19
20        headers.insert(name, value);
21    }
22
23    Ok(headers)
24}
25
26pub(crate) fn parse_content_type(headers: &HeaderMap) -> Option<mime::Mime> {
27    headers
28        .get(header::CONTENT_TYPE)
29        .and_then(|val| val.to_str().ok())
30        .and_then(|val| val.parse::<mime::Mime>().ok())
31}