Skip to main content

cu29_logviz/
fallback.rs

1use std::collections::BTreeMap;
2
3pub fn flatten_json(
4    prefix: &str,
5    value: &serde_json::Value,
6) -> BTreeMap<String, serde_json::Value> {
7    let mut out = BTreeMap::new();
8    match value {
9        serde_json::Value::Object(map) => {
10            for (k, v) in map {
11                let key = format!("{}/{}", prefix, k);
12                out.extend(flatten_json(&key, v));
13            }
14        }
15        serde_json::Value::Array(arr) => {
16            for (idx, v) in arr.iter().enumerate() {
17                let key = format!("{}/{}", prefix, idx);
18                out.extend(flatten_json(&key, v));
19            }
20        }
21        _ => {
22            out.insert(prefix.to_string(), value.clone());
23        }
24    }
25    out
26}
27
28pub fn extract_scalars(flat: &BTreeMap<String, serde_json::Value>) -> Vec<(String, f64)> {
29    flat.iter()
30        .filter_map(|(k, v)| match v {
31            serde_json::Value::Number(n) => n.as_f64().map(|f| (k.clone(), f)),
32            serde_json::Value::Bool(b) => Some((k.clone(), if *b { 1.0 } else { 0.0 })),
33            _ => None,
34        })
35        .collect()
36}