1use std::cmp::Ordering;23use jrsonnet_evaluator::{4 function::builtin, operator::evaluate_compare_op, val::ArrValue, Result, Val,5};67#[builtin]8#[allow(non_snake_case)]9pub fn builtin___compare(v1: Val, v2: Val) -> Result<i32> {10 Ok(11 match evaluate_compare_op(&v1, &v2, jrsonnet_parser::BinaryOpType::Lt)? {12 Ordering::Less => -1,13 Ordering::Equal => 0,14 Ordering::Greater => 1,15 },16 )17}1819#[builtin]20#[allow(non_snake_case)]21pub fn builtin___compare_array(arr1: ArrValue, arr2: ArrValue) -> Result<i32> {22 builtin___compare(Val::Arr(arr1), Val::Arr(arr2))23}2425macro_rules! arr_comp {26 ($name:ident, $operator:expr) => {27 #[builtin]28 #[allow(non_snake_case)]29 pub fn $name(arr1: ArrValue, arr2: ArrValue) -> Result<bool> {30 let ordering = evaluate_compare_op(31 &Val::Arr(arr1),32 &Val::Arr(arr2),33 jrsonnet_parser::BinaryOpType::Lt,34 )?;35 Ok($operator.contains(&ordering))36 }37 };38}39arr_comp!(builtin___array_less, [Ordering::Less]);40arr_comp!(builtin___array_greater, [Ordering::Greater]);41arr_comp!(42 builtin___array_less_or_equal,43 [Ordering::Less, Ordering::Equal]44);45arr_comp!(46 builtin___array_greater_or_equal,47 [Ordering::Greater, Ordering::Equal]48);