git.delta.rocks / jrsonnet / refs/commits / f314b37b4c17

difftreelog

source

crates/jrsonnet-stdlib/src/parse.rs831 Bsourcehistory
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}