--- a/crates/jrsonnet-stdlib/src/objects.rs +++ b/crates/jrsonnet-stdlib/src/objects.rs @@ -4,7 +4,6 @@ IStr, ObjValue, ObjValueBuilder, }; - #[builtin] pub fn builtin_object_fields_ex( obj: ObjValue, @@ -30,11 +29,22 @@ } #[builtin] -pub fn builtin_object_remove_key(obj: ObjValue, key: IStr) -> ObjValue { +pub fn builtin_object_remove_key( + obj: ObjValue, + key: IStr, + // Standard implementation uses std.objectFields without such argument, we can't + // assume order preservation should always be enabled/disabled + #[cfg(feature = "exp-preserve-order")] preserve_order: Option, +) -> ObjValue { + #[cfg(feature = "exp-preserve-order")] + let preserve_order = preserve_order.unwrap_or(false); let mut new_obj = ObjValueBuilder::with_capacity(obj.len() - 1); - for (k, v) in obj.iter() { + for (k, v) in obj.iter( + #[cfg(feature = "exp-preserve-order")] + preserve_order, + ) { if k == key { - continue + continue; } new_obj.member(k).value_unchecked(v.unwrap()) }