From 57f709a58e122544acbcbb3049e38964d96ce3de Mon Sep 17 00:00:00 2001 From: Yaroslav Bolyukin Date: Sun, 19 May 2024 19:36:51 +0000 Subject: [PATCH] perf: move resolvePath to native --- --- a/crates/jrsonnet-stdlib/src/arrays.rs +++ b/crates/jrsonnet-stdlib/src/arrays.rs @@ -208,6 +208,14 @@ ) } +#[builtin] +pub fn builtin_resolve_path(f: String, r: String) -> String { + let Some(pos) = f.rfind('/') else { + return r; + }; + format!("{}{}", &f[..=pos], r) +} + pub fn deep_join_inner(out: &mut String, arr: IndexableVal) -> Result<()> { use std::fmt::Write; match arr { --- a/crates/jrsonnet-stdlib/src/lib.rs +++ b/crates/jrsonnet-stdlib/src/lib.rs @@ -86,6 +86,7 @@ ("range", builtin_range::INST), ("join", builtin_join::INST), ("lines", builtin_lines::INST), + ("resolvePath", builtin_resolve_path::INST), ("deepJoin", builtin_deep_join::INST), ("reverse", builtin_reverse::INST), ("any", builtin_any::INST), --- a/crates/jrsonnet-stdlib/src/std.jsonnet +++ b/crates/jrsonnet-stdlib/src/std.jsonnet @@ -10,8 +10,4 @@ error ('std.mapWithKey second param must be object, got ' + std.type(obj)) else { [k]: func(k, obj[k]) for k in std.objectFields(obj) }, - - resolvePath(f, r):: - local arr = std.split(f, '/'); - std.join('/', std.makeArray(std.length(arr) - 1, function(i) arr[i]) + [r]), } -- gitstuff