git.delta.rocks / jrsonnet / refs/commits / b9668b119e46

difftreelog

feat add std.objectRemoveKey

Paweł Bęza2023-07-14parent: #3e814e5.patch.diff
in: master
Upstream issue: https://github.com/google/go-jsonnet/pull/686

2 files changed

modifiedcrates/jrsonnet-stdlib/src/lib.rsdiffbeforeafterboth
139 // Objects139 // Objects
140 ("objectFieldsEx", builtin_object_fields_ex::INST),140 ("objectFieldsEx", builtin_object_fields_ex::INST),
141 ("objectHasEx", builtin_object_has_ex::INST),141 ("objectHasEx", builtin_object_has_ex::INST),
142 ("objectRemoveKey", builtin_object_remove_key::INST),
142 // Manifest143 // Manifest
143 ("escapeStringJson", builtin_escape_string_json::INST),144 ("escapeStringJson", builtin_escape_string_json::INST),
144 ("manifestJsonEx", builtin_manifest_json_ex::INST),145 ("manifestJsonEx", builtin_manifest_json_ex::INST),
modifiedcrates/jrsonnet-stdlib/src/objects.rsdiffbeforeafterboth
1use jrsonnet_evaluator::{1use jrsonnet_evaluator::{
2 function::builtin,2 function::builtin,
3 val::{StrValue, Val},3 val::{StrValue, Val},
4 IStr, ObjValue,4 IStr, ObjValue, ObjValueBuilder,
5};5};
6
67
28 obj.has_field_ex(fname, hidden)29 obj.has_field_ex(fname, hidden)
29}30}
31
32#[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 continue
38 }
39 new_obj.member(k).value_unchecked(v.unwrap())
40 }
41
42 new_obj.build()
43}
3044