in avro/src/types.rs [289:312]
fn from(value: JsonValue) -> Self {
match value {
JsonValue::Null => Self::Null,
JsonValue::Bool(b) => b.into(),
JsonValue::Number(ref n) if n.is_i64() => {
let n = n.as_i64().unwrap();
if n >= i32::MIN as i64 && n <= i32::MAX as i64 {
Value::Int(n as i32)
} else {
Value::Long(n)
}
}
JsonValue::Number(ref n) if n.is_f64() => Value::Double(n.as_f64().unwrap()),
JsonValue::Number(n) => Value::Long(n.as_u64().unwrap() as i64), // TODO: Not so great
JsonValue::String(s) => s.into(),
JsonValue::Array(items) => Value::Array(items.into_iter().map(Value::from).collect()),
JsonValue::Object(items) => Value::Map(
items
.into_iter()
.map(|(key, value)| (key, value.into()))
.collect(),
),
}
}