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

difftreelog

source

crates/jrsonnet-stdlib/src/objects.rs1.3 KiBsourcehistory
1use jrsonnet_evaluator::{2	function::builtin,3	val::{StrValue, Val},4	IStr, ObjValue, ObjValueBuilder,5};67#[builtin]8pub fn builtin_object_fields_ex(9	obj: ObjValue,10	hidden: bool,11	#[cfg(feature = "exp-preserve-order")] preserve_order: Option<bool>,12) -> Vec<Val> {13	#[cfg(feature = "exp-preserve-order")]14	let preserve_order = preserve_order.unwrap_or(false);15	let out = obj.fields_ex(16		hidden,17		#[cfg(feature = "exp-preserve-order")]18		preserve_order,19	);20	out.into_iter()21		.map(StrValue::Flat)22		.map(Val::Str)23		.collect::<Vec<_>>()24}2526#[builtin]27pub fn builtin_object_has_ex(obj: ObjValue, fname: IStr, hidden: bool) -> bool {28	obj.has_field_ex(fname, hidden)29}3031#[builtin]32pub fn builtin_object_remove_key(33	obj: ObjValue,34	key: IStr,35	// Standard implementation uses std.objectFields without such argument, we can't36	// assume order preservation should always be enabled/disabled37	#[cfg(feature = "exp-preserve-order")] preserve_order: Option<bool>,38) -> ObjValue {39	#[cfg(feature = "exp-preserve-order")]40	let preserve_order = preserve_order.unwrap_or(false);41	let mut new_obj = ObjValueBuilder::with_capacity(obj.len() - 1);42	for (k, v) in obj.iter(43		#[cfg(feature = "exp-preserve-order")]44		preserve_order,45	) {46		if k == key {47			continue;48		}49		new_obj.member(k).value_unchecked(v.unwrap())50	}5152	new_obj.build()53}