difftreelog
perf move deepJoin to native
in: master
3 files changed
crates/jrsonnet-stdlib/src/arrays.rsdiffbeforeafterboth204pub fn builtin_lines(arr: ArrValue) -> Result<IndexableVal> {204pub fn builtin_lines(arr: ArrValue) -> Result<IndexableVal> {205 builtin_join(205 builtin_join(206 IndexableVal::Str("\n".into()),206 IndexableVal::Str("\n".into()),207 ArrValue::extended(arr, ArrValue::eager(vec![Val::string("")])).into(),207 ArrValue::extended(arr, ArrValue::eager(vec![Val::string("")])),208 )208 )209}209}210211pub fn deep_join_inner(out: &mut String, arr: IndexableVal) -> Result<()> {212 use std::fmt::Write;213 match arr {214 IndexableVal::Str(s) => write!(out, "{s}").expect("no error"),215 IndexableVal::Arr(arr) => {216 for ele in arr.iter() {217 let indexable = IndexableVal::from_untyped(ele?)?;218 deep_join_inner(out, indexable)?;219 }220 }221 }222 Ok(())223}224225#[builtin]226pub fn builtin_deep_join(arr: IndexableVal) -> Result<String> {227 let mut out = String::new();228 deep_join_inner(&mut out, arr)?;229 Ok(out)230}210231211#[builtin]232#[builtin]212pub fn builtin_reverse(arr: ArrValue) -> ArrValue {233pub fn builtin_reverse(arr: ArrValue) -> ArrValue {crates/jrsonnet-stdlib/src/lib.rsdiffbeforeafterboth86 ("range", builtin_range::INST),86 ("range", builtin_range::INST),87 ("join", builtin_join::INST),87 ("join", builtin_join::INST),88 ("lines", builtin_lines::INST),88 ("lines", builtin_lines::INST),89 ("deepJoin", builtin_deep_join::INST),89 ("reverse", builtin_reverse::INST),90 ("reverse", builtin_reverse::INST),90 ("any", builtin_any::INST),91 ("any", builtin_any::INST),91 ("all", builtin_all::INST),92 ("all", builtin_all::INST),crates/jrsonnet-stdlib/src/std.jsonnetdiffbeforeafterboth11 else11 else12 { [k]: func(k, obj[k]) for k in std.objectFields(obj) },12 { [k]: func(k, obj[k]) for k in std.objectFields(obj) },131314 deepJoin(arr)::15 if std.isString(arr) then16 arr17 else if std.isArray(arr) then18 std.join('', [std.deepJoin(x) for x in arr])19 else20 error 'Expected string or array, got %s' % std.type(arr),2122 assertEqual(a, b)::14 assertEqual(a, b)::23 if a == b then15 if a == b then24 true16 true