akar_function/scalar/
boolean.rs1use crate::registry::*;
2use akar_common::types::Value;
3
4pub(crate) fn evaluate_boolean(op: BooleanOp, args: &[Value]) -> Result<Value, String> {
7 if args.len() < 2 && !matches!(op, BooleanOp::Not) {
8 return Err("Boolean op requires 2 arguments".into());
9 }
10 let a = match &args[0] {
11 Value::Bool(b) => *b,
12 _ => return Err("Expected boolean".into()),
13 };
14 match op {
15 BooleanOp::And => {
16 let b = match &args[1] {
17 Value::Bool(x) => *x,
18 _ => return Err("Expected boolean".into()),
19 };
20 Ok(Value::Bool(a && b))
21 }
22 BooleanOp::Or => {
23 let b = match &args[1] {
24 Value::Bool(x) => *x,
25 _ => return Err("Expected boolean".into()),
26 };
27 Ok(Value::Bool(a || b))
28 }
29 BooleanOp::Xor => {
30 let b = match &args[1] {
31 Value::Bool(x) => *x,
32 _ => return Err("Expected boolean".into()),
33 };
34 Ok(Value::Bool(a ^ b))
35 }
36 BooleanOp::Not => Ok(Value::Bool(!a)),
37 }
38}