use serde_json::Value;
use super::{logic, Data, Expression};
pub fn compute(args: &[Expression], data: &Data) -> Value {
let arr = match args.get(0).map(|arg| arg.compute(data)) {
Some(Value::Array(arr)) => arr,
_ => Vec::with_capacity(0),
};
let op = match args.get(1) {
Some(expr) => expr,
None => &Expression::Constant(&Value::Null),
};
let mut result = Vec::new();
for elem in arr.iter() {
let include = op.compute(&Data::from_json(elem));
if logic::is_truthy(&include) {
result.push(elem.clone());
}
}
Value::Array(result)
}