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")] preserve_order: bool,61) -> ArrValue {62 o.values_ex(63 include_hidden,64 #[cfg(feature = "exp-preserve-order")]65 preserve_order,66 )67}68#[builtin]69pub fn builtin_object_values(70 o: ObjValue,7172 #[default(false)]73 #[cfg(feature = "exp-preserve-order")]74 preserve_order: bool,75) -> ArrValue {76 builtin_object_values_ex(77 o,78 false,79 #[cfg(feature = "exp-preserve-order")]80 preserve_order,81 )82}83#[builtin]84pub fn builtin_object_values_all(85 o: ObjValue,8687 #[default(false)]88 #[cfg(feature = "exp-preserve-order")]89 preserve_order: bool,90) -> ArrValue {91 builtin_object_values_ex(92 o,93 true,94 #[cfg(feature = "exp-preserve-order")]95 preserve_order,96 )97}9899pub fn builtin_object_keys_values_ex(100 o: ObjValue,101 include_hidden: bool,102103 #[cfg(feature = "exp-preserve-order")] preserve_order: bool,104) -> ArrValue {105 o.key_values_ex(106 include_hidden,107 #[cfg(feature = "exp-preserve-order")]108 preserve_order,109 )110}111#[builtin]112pub fn builtin_object_keys_values(113 o: ObjValue,114115 #[default(false)]116 #[cfg(feature = "exp-preserve-order")]117 preserve_order: bool,118) -> ArrValue {119 builtin_object_keys_values_ex(120 o,121 false,122 #[cfg(feature = "exp-preserve-order")]123 preserve_order,124 )125}126#[builtin]127pub fn builtin_object_keys_values_all(128 o: ObjValue,129130 #[default(false)]131 #[cfg(feature = "exp-preserve-order")]132 preserve_order: bool,133) -> ArrValue {134 builtin_object_keys_values_ex(135 o,136 true,137 #[cfg(feature = "exp-preserve-order")]138 preserve_order,139 )140}141142#[builtin]143pub fn builtin_object_has_ex(obj: ObjValue, fname: IStr, hidden: bool) -> bool {144 obj.has_field_ex(fname, hidden)145}146147#[builtin]148pub fn builtin_object_has(o: ObjValue, f: IStr) -> bool {149 o.has_field(f)150}151152#[builtin]153pub fn builtin_object_has_all(o: ObjValue, f: IStr) -> bool {154 o.has_field_include_hidden(f)155}156157#[builtin]158pub fn builtin_object_remove_key(159 obj: ObjValue,160 key: IStr,161162 163 164 #[default(false)]165 #[cfg(feature = "exp-preserve-order")]166 preserve_order: bool,167) -> ObjValue {168 let mut new_obj = ObjValueBuilder::with_capacity(obj.len() - 1);169 for (k, v) in obj.iter(170 #[cfg(feature = "exp-preserve-order")]171 preserve_order,172 ) {173 if k == key {174 continue;175 }176 new_obj.field(k).value(v.unwrap());177 }178179 new_obj.build()180}