1use jrsonnet_evaluator::{function::builtin, runtime_error, IStr, Result, Val};2use serde::Deserialize;34#[builtin]5pub fn builtin_parse_json(str: IStr) -> Result<Val> {6 let value: Val =7 serde_json::from_str(&str).map_err(|e| runtime_error!("failed to parse json: {e}"))?;8 Ok(value)9}1011#[builtin]12pub fn builtin_parse_yaml(str: IStr) -> Result<Val> {13 use serde_yaml_with_quirks::DeserializingQuirks;14 let value = serde_yaml_with_quirks::Deserializer::from_str_with_quirks(15 &str,16 DeserializingQuirks { old_octals: true },17 );18 let mut out = vec![];19 for item in value {20 let val =21 Val::deserialize(item).map_err(|e| runtime_error!("failed to parse yaml: {e}"))?;22 out.push(val);23 }24 Ok(if out.is_empty() {25 Val::Null26 } else if out.len() == 1 {27 out.into_iter().next().unwrap()28 } else {29 Val::Arr(out.into())30 })31}