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 112 113 #[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}