From 9440ce0bbfa744813a89e4414a2622c730b3771a Mon Sep 17 00:00:00 2001 From: Yaroslav Bolyukin Date: Sat, 08 Apr 2023 18:29:25 +0000 Subject: [PATCH] feat: C++ jsonnet compat methods --- --- /dev/null +++ b/crates/jrsonnet-stdlib/src/compat.rs @@ -0,0 +1,15 @@ +use std::cmp::Ordering; + +use jrsonnet_evaluator::{error::Result, function::builtin, operator::evaluate_compare_op, Val}; + +#[builtin] +#[allow(non_snake_case)] +pub fn builtin___compare(v1: Val, v2: Val) -> Result { + Ok( + match evaluate_compare_op(&v1, &v2, jrsonnet_parser::BinaryOpType::Lt)? { + Ordering::Less => -1, + Ordering::Equal => 0, + Ordering::Greater => 1, + }, + ) +} --- a/crates/jrsonnet-stdlib/src/lib.rs +++ b/crates/jrsonnet-stdlib/src/lib.rs @@ -150,6 +150,8 @@ // Sets ("setMember", builtin_set_member::INST), ("setInter", builtin_set_inter::INST), + // Compat + ("__compare", builtin___compare::INST), ] .iter() .cloned() --- a/crates/jrsonnet-stdlib/src/std.jsonnet +++ b/crates/jrsonnet-stdlib/src/std.jsonnet @@ -302,4 +302,13 @@ error 'find second parameter should be an array, got ' + std.type(arr) else std.filter(function(i) arr[i] == value, std.range(0, std.length(arr) - 1)), + + // Compat + __compare_array(arr1, arr2): + assert std.isArray(arr1) && std.isArray(arr2); + std.__compare(arr1, arr2), + __array_less(arr1, arr2):: std.__compare_array(arr1, arr2) == -1, + __array_greater(arr1, arr2):: std.__compare_array(arr1, arr2) == 1, + __array_less_or_equal(arr1, arr2):: std.__compare_array(arr1, arr2) <= 0, + __array_greater_or_equal(arr1, arr2):: std.__compare_array(arr1, arr2) >= 0, } -- gitstuff