git.delta.rocks / jrsonnet / refs/commits / 3e814e5a718d

difftreelog

feat add std.remove and std.removeAt

Paweł Bęza2023-07-12parent: #aee64ce.patch.diff
in: master
Upstream issue: https://github.com/google/go-jsonnet/pull/689

2 files changed

modifiedcrates/jrsonnet-stdlib/src/arrays.rsdiffbeforeafterboth
254 Ok(Val::Num(arr.iter().sum::<f64>() / (arr.len() as f64)))254 Ok(Val::Num(arr.iter().sum::<f64>() / (arr.len() as f64)))
255}255}
256
257#[builtin]
258pub fn builtin_remove_at(
259 arr: ArrValue,
260 index: usize,
261) -> Result<ArrValue> {
262 let newArrLeft = arr.clone().slice(None, Some(index), None);
263 let newArrRight = arr.clone().slice(Some(index + 1), None, None);
264 return Ok(ArrValue::extended(
265 newArrLeft.unwrap_or(ArrValue::empty()),
266 newArrRight.unwrap_or(ArrValue::empty()))
267 );
268}
269
270#[builtin]
271pub fn builtin_remove(arr: ArrValue, elem: Val) -> Result<ArrValue> {
272 for (index, item) in arr.iter().enumerate() {
273 if equals(&item?, &elem)? {
274 return builtin_remove_at(arr.clone(), index)
275 }
276 }
277 Ok(arr)
278}
256279
modifiedcrates/jrsonnet-stdlib/src/lib.rsdiffbeforeafterboth
--- 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),