use axum::http::{HeaderMap, header}; /// Return the inbound media type without parameters, defaulting to binary. pub(super) fn content_type(headers: &HeaderMap) -> String { headers .get(header::CONTENT_TYPE) .and_then(|value| value.to_str().ok()) .and_then(|value| value.split(';').next()) .map(str::trim) .filter(|value| !value.is_empty()) .unwrap_or("application/octet-stream") .to_string() } #[cfg(test)] mod tests { use super::content_type; use axum::http::{HeaderMap, HeaderValue, header}; #[test] fn content_type_from_headers_defaults_to_octet_stream() { let headers = HeaderMap::new(); assert_eq!(content_type(&headers), "application/octet-stream"); } #[test] fn content_type_from_headers_preserves_parameters() { let mut headers = HeaderMap::new(); headers.insert( header::CONTENT_TYPE, HeaderValue::from_static("text/plain; charset=utf-8"), ); assert_eq!(content_type(&headers), "text/plain"); } #[test] fn content_type_from_headers_discards_empty_values() { let mut headers = HeaderMap::new(); headers.insert( header::CONTENT_TYPE, HeaderValue::from_static(" ; charset=utf-8"), ); assert_eq!(content_type(&headers), "application/octet-stream"); } }