feat: add $consider (UP/DOWN) toggle to query builder and evaluators
This commit is contained in:
@@ -50,6 +50,17 @@ pub struct Response {
|
||||
pub fn evaluate(query: &Value, response: &Response) -> Result<bool> {
|
||||
match query {
|
||||
Value::Object(map) => {
|
||||
// $consider — "up" (default) or "down": flips result if conditions match
|
||||
if let Some(consider) = map.get("$consider") {
|
||||
let is_down = consider.as_str() == Some("down");
|
||||
let rest: serde_json::Map<String, Value> = map.iter()
|
||||
.filter(|(k, _)| k.as_str() != "$consider")
|
||||
.map(|(k, v)| (k.clone(), v.clone()))
|
||||
.collect();
|
||||
let matches = evaluate(&Value::Object(rest), response).unwrap_or(false);
|
||||
return Ok(if is_down { !matches } else { matches });
|
||||
}
|
||||
|
||||
// $and / $or / $not
|
||||
if let Some(and) = map.get("$and") {
|
||||
let Value::Array(clauses) = and else { bail!("$and expects array") };
|
||||
|
||||
Reference in New Issue
Block a user