use crate::value::Value;
use super::common;
use super::evaluator::RbacBuiltinError;
pub(super) fn numeric_compare(
left: &Value,
right: &Value,
op: &str,
name: &'static str,
) -> Result<bool, RbacBuiltinError> {
let lhs = common::value_as_i64(left, name)?;
let rhs = common::value_as_i64(right, name)?;
Ok(match op {
"==" => lhs == rhs,
"!=" => lhs != rhs,
"<" => lhs < rhs,
"<=" => lhs <= rhs,
">" => lhs > rhs,
">=" => lhs >= rhs,
_ => false,
})
}
pub(super) fn numeric_in_range(
left: &Value,
right: &Value,
name: &'static str,
) -> Result<bool, RbacBuiltinError> {
let value = common::value_as_i64(left, name)?;
let (start, end) = common::range_bounds(right, name)?;
Ok(value >= start && value <= end)
}