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 36 37 #[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}