From 3e814e5a718dbdb1ce9753b9e8257f8590a3d867 Mon Sep 17 00:00:00 2001 From: Paweł Bęza Date: Wed, 12 Jul 2023 19:22:21 +0000 Subject: [PATCH] feat: add std.remove and std.removeAt Upstream issue: https://github.com/google/go-jsonnet/pull/689 --- --- a/crates/jrsonnet-stdlib/src/arrays.rs +++ b/crates/jrsonnet-stdlib/src/arrays.rs @@ -253,3 +253,26 @@ } Ok(Val::Num(arr.iter().sum::() / (arr.len() as f64))) } + +#[builtin] +pub fn builtin_remove_at( + arr: ArrValue, + index: usize, +) -> Result { + let newArrLeft = arr.clone().slice(None, Some(index), None); + let newArrRight = arr.clone().slice(Some(index + 1), None, None); + return Ok(ArrValue::extended( + newArrLeft.unwrap_or(ArrValue::empty()), + newArrRight.unwrap_or(ArrValue::empty())) + ); +} + +#[builtin] +pub fn builtin_remove(arr: ArrValue, elem: Val) -> Result { + for (index, item) in arr.iter().enumerate() { + if equals(&item?, &elem)? { + return builtin_remove_at(arr.clone(), index) + } + } + Ok(arr) +} --- a/crates/jrsonnet-stdlib/src/lib.rs +++ b/crates/jrsonnet-stdlib/src/lib.rs @@ -83,6 +83,8 @@ ("contains", builtin_member::INST), ("count", builtin_count::INST), ("avg", builtin_avg::INST), + ("removeAt", builtin_remove_at::INST), + ("remove", builtin_remove::INST), // Math ("abs", builtin_abs::INST), ("sign", builtin_sign::INST), -- gitstuff