unison/value/
from_json.rs

1use 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}