robinpath_modules/
serde_convert.rs1use robinpath::Value;
2
3pub fn json_to_value(v: serde_json::Value) -> Value {
5 match v {
6 serde_json::Value::Null => Value::Null,
7 serde_json::Value::Bool(b) => Value::Bool(b),
8 serde_json::Value::Number(n) => Value::Number(n.as_f64().unwrap_or(0.0)),
9 serde_json::Value::String(s) => Value::String(s),
10 serde_json::Value::Array(arr) => {
11 Value::Array(arr.into_iter().map(json_to_value).collect())
12 }
13 serde_json::Value::Object(obj) => {
14 let mut map = indexmap::IndexMap::new();
15 for (k, v) in obj {
16 map.insert(k, json_to_value(v));
17 }
18 Value::Object(map)
19 }
20 }
21}
22
23pub fn value_to_json(v: &Value) -> serde_json::Value {
25 match v {
26 Value::Null => serde_json::Value::Null,
27 Value::Bool(b) => serde_json::Value::Bool(*b),
28 Value::Number(n) => serde_json::json!(*n),
29 Value::String(s) => serde_json::Value::String(s.clone()),
30 Value::Array(arr) => {
31 serde_json::Value::Array(arr.iter().map(value_to_json).collect())
32 }
33 Value::Object(obj) => {
34 let mut map = serde_json::Map::new();
35 for (k, v) in obj {
36 map.insert(k.clone(), value_to_json(v));
37 }
38 serde_json::Value::Object(map)
39 }
40 _ => serde_json::Value::String(v.to_display_string()),
41 }
42}