unison/value/
from_json.rs1use serde_json::Value as JsonValue;
2use value::Value;
3
4impl From<JsonValue> for Value {
5 fn from(json_value: JsonValue) -> Self {
6 match json_value {
7 JsonValue::Null => Value::None,
8 JsonValue::Bool(b) => Value::Bool(b),
9 JsonValue::Number(n) => {
10 if let Some(n) = n.as_f64() {
11 return Value::F64(n);
12 }
13 if let Some(n) = n.as_u64() {
14 return Value::U64(n);
15 }
16 if let Some(n) = n.as_i64() {
17 return Value::I64(n);
18 }
19 unreachable!()
20 }
21 JsonValue::String(s) => Value::String(s),
22 JsonValue::Array(v) => Value::HashMap(
23 v.into_iter()
24 .enumerate()
25 .map(|(i, v)| (i.to_string(), v.into()))
26 .collect(),
27 ),
28 JsonValue::Object(h) => Value::HashMap(h.into_iter().map(|(k, v)| (k, v.into())).collect()),
29 }
30 }
31}