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 145 146 #[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}