1use jrsonnet_evaluator::{2 function::builtin,3 val::{StrValue, Val},4 IStr, ObjValue, ObjValueBuilder,5};678#[builtin]9pub fn builtin_object_fields_ex(10 obj: ObjValue,11 hidden: bool,12 #[cfg(feature = "exp-preserve-order")] preserve_order: Option<bool>,13) -> Vec<Val> {14 #[cfg(feature = "exp-preserve-order")]15 let preserve_order = preserve_order.unwrap_or(false);16 let out = obj.fields_ex(17 hidden,18 #[cfg(feature = "exp-preserve-order")]19 preserve_order,20 );21 out.into_iter()22 .map(StrValue::Flat)23 .map(Val::Str)24 .collect::<Vec<_>>()25}2627#[builtin]28pub fn builtin_object_has_ex(obj: ObjValue, fname: IStr, hidden: bool) -> bool {29 obj.has_field_ex(fname, hidden)30}3132#[builtin]33pub fn builtin_object_remove_key(obj: ObjValue, key: IStr) -> ObjValue {34 let mut new_obj = ObjValueBuilder::with_capacity(obj.len() - 1);35 for (k, v) in obj.iter() {36 if k == key {37 continue38 }39 new_obj.member(k).value_unchecked(v.unwrap())40 }4142 new_obj.build()43}