git.delta.rocks / jrsonnet / refs/commits / 58696dc4e430

difftreelog

source

crates/jrsonnet-stdlib/src/objects.rs3.6 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,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().map(Val::string).collect::<Vec<_>>()21}2223#[builtin]24pub fn builtin_object_fields(25	o: ObjValue,26	#[cfg(feature = "exp-preserve-order")] preserve_order: Option<bool>,27) -> Vec<Val> {28	builtin_object_fields_ex(29		o,30		false,31		#[cfg(feature = "exp-preserve-order")]32		preserve_order,33	)34}3536#[builtin]37pub fn builtin_object_fields_all(38	o: ObjValue,39	#[cfg(feature = "exp-preserve-order")] preserve_order: Option<bool>,40) -> Vec<Val> {41	builtin_object_fields_ex(42		o,43		true,44		#[cfg(feature = "exp-preserve-order")]45		preserve_order,46	)47}4849pub fn builtin_object_values_ex(50	o: ObjValue,51	include_hidden: bool,52	#[cfg(feature = "exp-preserve-order")] preserve_order: Option<bool>,53) -> ArrValue {54	#[cfg(feature = "exp-preserve-order")]55	let preserve_order = preserve_order.unwrap_or(false);56	o.values_ex(57		include_hidden,58		#[cfg(feature = "exp-preserve-order")]59		preserve_order,60	)61}62#[builtin]63pub fn builtin_object_values(64	o: ObjValue,65	#[cfg(feature = "exp-preserve-order")] preserve_order: Option<bool>,66) -> ArrValue {67	builtin_object_values_ex(68		o,69		false,70		#[cfg(feature = "exp-preserve-order")]71		preserve_order,72	)73}74#[builtin]75pub fn builtin_object_values_all(76	o: ObjValue,77	#[cfg(feature = "exp-preserve-order")] preserve_order: Option<bool>,78) -> ArrValue {79	builtin_object_values_ex(80		o,81		true,82		#[cfg(feature = "exp-preserve-order")]83		preserve_order,84	)85}8687pub fn builtin_object_keys_values_ex(88	o: ObjValue,89	include_hidden: bool,90	#[cfg(feature = "exp-preserve-order")] preserve_order: Option<bool>,91) -> ArrValue {92	#[cfg(feature = "exp-preserve-order")]93	let preserve_order = preserve_order.unwrap_or(false);94	o.key_values_ex(95		include_hidden,96		#[cfg(feature = "exp-preserve-order")]97		preserve_order,98	)99}100#[builtin]101pub fn builtin_object_keys_values(102	o: ObjValue,103	#[cfg(feature = "exp-preserve-order")] preserve_order: Option<bool>,104) -> ArrValue {105	builtin_object_keys_values_ex(106		o,107		false,108		#[cfg(feature = "exp-preserve-order")]109		preserve_order,110	)111}112#[builtin]113pub fn builtin_object_keys_values_all(114	o: ObjValue,115	#[cfg(feature = "exp-preserve-order")] preserve_order: Option<bool>,116) -> ArrValue {117	builtin_object_keys_values_ex(118		o,119		true,120		#[cfg(feature = "exp-preserve-order")]121		preserve_order,122	)123}124125#[builtin]126pub fn builtin_object_has_ex(obj: ObjValue, fname: IStr, hidden: bool) -> bool {127	obj.has_field_ex(fname, hidden)128}129130#[builtin]131pub fn builtin_object_has(o: ObjValue, f: IStr) -> bool {132	o.has_field(f)133}134135#[builtin]136pub fn builtin_object_has_all(o: ObjValue, f: IStr) -> bool {137	o.has_field_include_hidden(f)138}139140#[builtin]141pub fn builtin_object_remove_key(142	obj: ObjValue,143	key: IStr,144	// Standard implementation uses std.objectFields without such argument, we can't145	// assume order preservation should always be enabled/disabled146	#[cfg(feature = "exp-preserve-order")] preserve_order: Option<bool>,147) -> ObjValue {148	#[cfg(feature = "exp-preserve-order")]149	let preserve_order = preserve_order.unwrap_or(false);150	let mut new_obj = ObjValueBuilder::with_capacity(obj.len() - 1);151	for (k, v) in obj.iter(152		#[cfg(feature = "exp-preserve-order")]153		preserve_order,154	) {155		if k == key {156			continue;157		}158		new_obj.field(k).value(v.unwrap())159	}160161	new_obj.build()162}