web-route 0.2.5

Ergonomic web route construction, joining, and population for Rust web frameworks
Documentation
use serde::Serialize;
use serde_json::{Value, to_value};
use std::collections::HashMap;

pub(crate) fn struct_to_map<T: Serialize>(input: &T) -> Option<HashMap<String, String>> {
    match to_value(input).ok()? {
        Value::Object(map) => {
            let string_map = map
                .into_iter()
                .filter_map(|(k, v)| {
                    let value_str = match v {
                        Value::String(s) => s,
                        Value::Number(n) => n.to_string(),
                        Value::Bool(b) => b.to_string(),
                        Value::Null | Value::Array(_) | Value::Object(_) => return None,
                    };
                    Some((k, value_str))
                })
                .collect();
            Some(string_map)
        }
        Value::Null | Value::Bool(_) | Value::Number(_) | Value::String(_) | Value::Array(_) => {
            None
        }
    }
}