git.delta.rocks / jrsonnet / refs/commits / 36af281ff0ca

difftreelog

source

crates/jrsonnet-stdlib/src/compat.rs1.0 KiBsourcehistory
1use std::cmp::Ordering;23use jrsonnet_evaluator::{Result, Val, function::builtin, val::ArrValue};45#[builtin]6#[allow(non_snake_case)]7pub fn builtin___compare(v1: Val, v2: Val) -> Result<i32> {8	Ok(match Val::try_cmp(&v1, &v2)? {9		Ordering::Less => -1,10		Ordering::Equal => 0,11		Ordering::Greater => 1,12	})13}1415#[builtin]16#[allow(non_snake_case)]17pub fn builtin___compare_array(arr1: ArrValue, arr2: ArrValue) -> Result<i32> {18	builtin___compare(Val::Arr(arr1), Val::Arr(arr2))19}2021macro_rules! arr_comp {22	($name:ident, $operator:expr) => {23		#[builtin]24		#[allow(non_snake_case)]25		pub fn $name(arr1: ArrValue, arr2: ArrValue) -> Result<bool> {26			let ordering = Val::try_cmp(&Val::Arr(arr1), &Val::Arr(arr2))?;27			Ok($operator.contains(&ordering))28		}29	};30}31arr_comp!(builtin___array_less, [Ordering::Less]);32arr_comp!(builtin___array_greater, [Ordering::Greater]);33arr_comp!(34	builtin___array_less_or_equal,35	[Ordering::Less, Ordering::Equal]36);37arr_comp!(38	builtin___array_greater_or_equal,39	[Ordering::Greater, Ordering::Equal]40);