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

difftreelog

source

crates/jrsonnet-stdlib/src/objects.rs3.0 KiBsourcehistory
1use jrsonnet_evaluator::{2	function::builtin,3	val::{ArrValue, 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}2526pub fn builtin_object_values_ex(27	o: ObjValue,28	include_hidden: bool,29	#[cfg(feature = "exp-preserve-order")] preserve_order: Option<bool>,30) -> ArrValue {31	#[cfg(feature = "exp-preserve-order")]32	let preserve_order = preserve_order.unwrap_or(false);33	o.values_ex(34		include_hidden,35		#[cfg(feature = "exp-preserve-order")]36		preserve_order,37	)38}39#[builtin]40pub fn builtin_object_values(41	o: ObjValue,42	#[cfg(feature = "exp-preserve-order")] preserve_order: Option<bool>,43) -> ArrValue {44	builtin_object_values_ex(45		o,46		false,47		#[cfg(feature = "exp-preserve-order")]48		preserve_order,49	)50}51#[builtin]52pub fn builtin_object_values_all(53	o: ObjValue,54	#[cfg(feature = "exp-preserve-order")] preserve_order: Option<bool>,55) -> ArrValue {56	builtin_object_values_ex(57		o,58		true,59		#[cfg(feature = "exp-preserve-order")]60		preserve_order,61	)62}6364pub fn builtin_object_keys_values_ex(65	o: ObjValue,66	include_hidden: bool,67	#[cfg(feature = "exp-preserve-order")] preserve_order: Option<bool>,68) -> ArrValue {69	#[cfg(feature = "exp-preserve-order")]70	let preserve_order = preserve_order.unwrap_or(false);71	o.key_values_ex(72		include_hidden,73		#[cfg(feature = "exp-preserve-order")]74		preserve_order,75	)76}77#[builtin]78pub fn builtin_object_keys_values(79	o: ObjValue,80	#[cfg(feature = "exp-preserve-order")] preserve_order: Option<bool>,81) -> ArrValue {82	builtin_object_keys_values_ex(83		o,84		false,85		#[cfg(feature = "exp-preserve-order")]86		preserve_order,87	)88}89#[builtin]90pub fn builtin_object_keys_values_all(91	o: ObjValue,92	#[cfg(feature = "exp-preserve-order")] preserve_order: Option<bool>,93) -> ArrValue {94	builtin_object_keys_values_ex(95		o,96		true,97		#[cfg(feature = "exp-preserve-order")]98		preserve_order,99	)100}101102#[builtin]103pub fn builtin_object_has_ex(obj: ObjValue, fname: IStr, hidden: bool) -> bool {104	obj.has_field_ex(fname, hidden)105}106107#[builtin]108pub fn builtin_object_remove_key(109	obj: ObjValue,110	key: IStr,111	// Standard implementation uses std.objectFields without such argument, we can't112	// assume order preservation should always be enabled/disabled113	#[cfg(feature = "exp-preserve-order")] preserve_order: Option<bool>,114) -> ObjValue {115	#[cfg(feature = "exp-preserve-order")]116	let preserve_order = preserve_order.unwrap_or(false);117	let mut new_obj = ObjValueBuilder::with_capacity(obj.len() - 1);118	for (k, v) in obj.iter(119		#[cfg(feature = "exp-preserve-order")]120		preserve_order,121	) {122		if k == key {123			continue;124		}125		new_obj.member(k).value_unchecked(v.unwrap())126	}127128	new_obj.build()129}