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

difftreelog

source

crates/jrsonnet-stdlib/src/objects.rs3.3 KiBsourcehistory
1use jrsonnet_evaluator::{2	function::builtin,3	val::{ArrValue, Val},4	IStr, ObjValue, ObjValueBuilder,5};67#[builtin]8pub fn builtin_object_fields_ex(9	obj: ObjValue,10	hidden: bool,1112	#[default(false)]13	#[cfg(feature = "exp-preserve-order")]14	preserve_order: bool,15) -> Vec<Val> {16	let out = obj.fields_ex(17		hidden,18		#[cfg(feature = "exp-preserve-order")]19		preserve_order,20	);21	out.into_iter().map(Val::string).collect::<Vec<_>>()22}2324#[builtin]25pub fn builtin_object_fields(26	o: ObjValue,2728	#[default(false)]29	#[cfg(feature = "exp-preserve-order")]30	preserve_order: bool,31) -> Vec<Val> {32	builtin_object_fields_ex(33		o,34		false,35		#[cfg(feature = "exp-preserve-order")]36		preserve_order,37	)38}3940#[builtin]41pub fn builtin_object_fields_all(42	o: ObjValue,4344	#[default(false)]45	#[cfg(feature = "exp-preserve-order")]46	preserve_order: bool,47) -> Vec<Val> {48	builtin_object_fields_ex(49		o,50		true,51		#[cfg(feature = "exp-preserve-order")]52		preserve_order,53	)54}5556pub fn builtin_object_values_ex(57	o: ObjValue,58	include_hidden: bool,5960	#[cfg(feature = "exp-preserve-order")]61	preserve_order: bool,62) -> ArrValue {63	o.values_ex(64		include_hidden,65		#[cfg(feature = "exp-preserve-order")]66		preserve_order,67	)68}69#[builtin]70pub fn builtin_object_values(71	o: ObjValue,7273	#[default(false)]74	#[cfg(feature = "exp-preserve-order")]75	preserve_order: bool,76) -> ArrValue {77	builtin_object_values_ex(78		o,79		false,80		#[cfg(feature = "exp-preserve-order")]81		preserve_order,82	)83}84#[builtin]85pub fn builtin_object_values_all(86	o: ObjValue,8788	#[default(false)]89	#[cfg(feature = "exp-preserve-order")]90	preserve_order: bool,91) -> ArrValue {92	builtin_object_values_ex(93		o,94		true,95		#[cfg(feature = "exp-preserve-order")]96		preserve_order,97	)98}99100pub fn builtin_object_keys_values_ex(101	o: ObjValue,102	include_hidden: bool,103104	#[cfg(feature = "exp-preserve-order")]105	preserve_order: bool,106) -> ArrValue {107	o.key_values_ex(108		include_hidden,109		#[cfg(feature = "exp-preserve-order")]110		preserve_order,111	)112}113#[builtin]114pub fn builtin_object_keys_values(115	o: ObjValue,116117	#[default(false)]118	#[cfg(feature = "exp-preserve-order")]119	preserve_order: bool,120) -> ArrValue {121	builtin_object_keys_values_ex(122		o,123		false,124		#[cfg(feature = "exp-preserve-order")]125		preserve_order,126	)127}128#[builtin]129pub fn builtin_object_keys_values_all(130	o: ObjValue,131132	#[default(false)]133	#[cfg(feature = "exp-preserve-order")]134	preserve_order: bool,135) -> ArrValue {136	builtin_object_keys_values_ex(137		o,138		true,139		#[cfg(feature = "exp-preserve-order")]140		preserve_order,141	)142}143144#[builtin]145pub fn builtin_object_has_ex(obj: ObjValue, fname: IStr, hidden: bool) -> bool {146	obj.has_field_ex(fname, hidden)147}148149#[builtin]150pub fn builtin_object_has(o: ObjValue, f: IStr) -> bool {151	o.has_field(f)152}153154#[builtin]155pub fn builtin_object_has_all(o: ObjValue, f: IStr) -> bool {156	o.has_field_include_hidden(f)157}158159#[builtin]160pub fn builtin_object_remove_key(161	obj: ObjValue,162	key: IStr,163164	// Standard implementation uses std.objectFields without such argument, we can't165	// assume order preservation should always be enabled/disabled166	#[default(false)]167	#[cfg(feature = "exp-preserve-order")]168	preserve_order: bool,169) -> ObjValue {170	let mut new_obj = ObjValueBuilder::with_capacity(obj.len() - 1);171	for (k, v) in obj.iter(172		#[cfg(feature = "exp-preserve-order")]173		preserve_order,174	) {175		if k == key {176			continue;177		}178		new_obj.field(k).value(v.unwrap());179	}180181	new_obj.build()182}