pub fn json_to_yaml(json: &serde_json::Value) -> serde_yaml::Value {
match json {
serde_json::Value::Null => serde_yaml::Value::Null,
serde_json::Value::Bool(b) => serde_yaml::Value::Bool(*b),
serde_json::Value::Number(n) => {
if let Some(i) = n.as_i64() {
serde_yaml::Value::Number(serde_yaml::Number::from(i))
} else if let Some(f) = n.as_f64() {
serde_yaml::Value::Number(serde_yaml::Number::from(f))
} else {
serde_yaml::Value::Null
}
}
serde_json::Value::String(s) => serde_yaml::Value::String(s.clone()),
serde_json::Value::Array(arr) => {
serde_yaml::Value::Sequence(arr.iter().map(json_to_yaml).collect())
}
serde_json::Value::Object(map) => {
let mut m = serde_yaml::Mapping::new();
for (k, v) in map {
m.insert(serde_yaml::Value::String(k.clone()), json_to_yaml(v));
}
serde_yaml::Value::Mapping(m)
}
}
}