1use jrsonnet_evaluator::{2 IStr, ObjValue, ObjValueBuilder,3 function::builtin,4 gc::WithCapacityExt,5 rustc_hash::FxHashSet,6 val::{ArrValue, Val},7};89#[builtin]10pub fn builtin_object_fields_ex(11 obj: ObjValue,12 hidden: bool,1314 #[default(false)]15 #[cfg(feature = "exp-preserve-order")]16 preserve_order: bool,17) -> Vec<Val> {18 let out = obj.fields_ex(19 hidden,20 #[cfg(feature = "exp-preserve-order")]21 preserve_order,22 );23 out.into_iter().map(Val::string).collect::<Vec<_>>()24}2526#[builtin]27pub fn builtin_object_fields(28 o: ObjValue,2930 #[default(false)]31 #[cfg(feature = "exp-preserve-order")]32 preserve_order: bool,33) -> Vec<Val> {34 builtin_object_fields_ex(35 o,36 false,37 #[cfg(feature = "exp-preserve-order")]38 preserve_order,39 )40}4142#[builtin]43pub fn builtin_object_fields_all(44 o: ObjValue,4546 #[default(false)]47 #[cfg(feature = "exp-preserve-order")]48 preserve_order: bool,49) -> Vec<Val> {50 builtin_object_fields_ex(51 o,52 true,53 #[cfg(feature = "exp-preserve-order")]54 preserve_order,55 )56}5758pub fn builtin_object_values_ex(59 o: ObjValue,60 include_hidden: bool,6162 #[cfg(feature = "exp-preserve-order")] preserve_order: bool,63) -> ArrValue {64 o.values_ex(65 include_hidden,66 #[cfg(feature = "exp-preserve-order")]67 preserve_order,68 )69}70#[builtin]71pub fn builtin_object_values(72 o: ObjValue,7374 #[default(false)]75 #[cfg(feature = "exp-preserve-order")]76 preserve_order: bool,77) -> ArrValue {78 builtin_object_values_ex(79 o,80 false,81 #[cfg(feature = "exp-preserve-order")]82 preserve_order,83 )84}85#[builtin]86pub fn builtin_object_values_all(87 o: ObjValue,8889 #[default(false)]90 #[cfg(feature = "exp-preserve-order")]91 preserve_order: bool,92) -> ArrValue {93 builtin_object_values_ex(94 o,95 true,96 #[cfg(feature = "exp-preserve-order")]97 preserve_order,98 )99}100101pub fn builtin_object_keys_values_ex(102 o: ObjValue,103 include_hidden: bool,104105 #[cfg(feature = "exp-preserve-order")] preserve_order: bool,106) -> ArrValue {107 o.key_values_ex(108 include_hidden,109 #[cfg(feature = "exp-preserve-order")]110 preserve_order,111 )112}113#[builtin]114pub fn builtin_object_keys_values(115 o: ObjValue,116117 #[default(false)]118 #[cfg(feature = "exp-preserve-order")]119 preserve_order: bool,120) -> ArrValue {121 builtin_object_keys_values_ex(122 o,123 false,124 #[cfg(feature = "exp-preserve-order")]125 preserve_order,126 )127}128#[builtin]129pub fn builtin_object_keys_values_all(130 o: ObjValue,131132 #[default(false)]133 #[cfg(feature = "exp-preserve-order")]134 preserve_order: bool,135) -> ArrValue {136 builtin_object_keys_values_ex(137 o,138 true,139 #[cfg(feature = "exp-preserve-order")]140 preserve_order,141 )142}143144#[builtin]145pub fn builtin_object_has_ex(obj: ObjValue, fname: IStr, hidden: bool) -> bool {146 obj.has_field_ex(fname, hidden)147}148149#[builtin]150pub fn builtin_object_has(o: ObjValue, f: IStr) -> bool {151 o.has_field(f)152}153154#[builtin]155pub fn builtin_object_has_all(o: ObjValue, f: IStr) -> bool {156 o.has_field_include_hidden(f)157}158159#[builtin]160pub fn builtin_object_remove_key(obj: ObjValue, key: IStr) -> ObjValue {161 let mut omit = FxHashSet::with_capacity(1);162 omit.insert(key);163164 let mut out = ObjValueBuilder::new();165 out.with_super(obj).with_fields_omitted(omit);166 out.build()167}