Не существует «правильного» способа сделать это. Так же, как не существует «правильного» способа автоматической реализации Display
для структуры, не существует Единого верного способа сериализации части данных в JSON.
Если все, что вам нужно, это получить что-то , которое считается как JSON, и, поскольку это для отладки, я просто распечатал бы отладочную форму заголовков и затем преобразовал ее в Value
use http::{header::HeaderValue, HeaderMap}; // 0.1.17
use serde_json; // 1.0.39
fn convert(headers: &HeaderMap<HeaderValue>) -> serde_json::Value {
format!("{:?}", headers).into()
}
Если вы хотите что-то более структурированное, вы можете (с потерями!) Преобразовать заголовки в HashMap<String, Vec<String>>
. Этот тип может быть тривиально сериализован в объект JSON:
use http::{header::HeaderValue, HeaderMap}; // 0.1.17
use std::collections::HashMap;
fn convert(headers: &HeaderMap<HeaderValue>) -> HashMap<String, Vec<String>> {
let mut header_hashmap = HashMap::new();
for (k, v) in headers {
let k = k.as_str().to_owned();
let v = String::from_utf8_lossy(v.as_bytes()).into_owned();
header_hashmap.entry(k).or_insert_with(Vec::new).push(v)
}
header_hashmap
}