use fsm_guards::{evaluate, EvalCtx, GuardError};
use serde_json::json;
fn main() {
let mut deep = json!({"==": [1, 2]});
for _ in 0..50 {
deep = json!({"and": [deep, {"==": [1, 2]}]});
}
let rule = json!({"or": [true, deep]});
let ctx = EvalCtx::new().with_fuel(5);
let result = evaluate(&rule, &json!({}), &ctx).unwrap();
println!("short-circuit or: {result}");
let rule = json!({"and": [
{"==": [1, 1]},
{"==": [2, 2]},
{"==": [3, 3]}
]});
match evaluate(&rule, &json!({}), &EvalCtx::new().with_fuel(5)) {
Ok(v) => println!("passed with fuel:5 → {v}"),
Err(GuardError::FuelExceeded { limit }) => println!("exceeded limit:{limit}"),
Err(e) => println!("error: {e}"),
}
let ctx = EvalCtx::new(); let rule = json!({"and": [
{"==": [{"var": "status"}, "active"]},
{">=": [{"var": "score"}, 80]},
{"in": [{"var": "role"}, ["admin", "operator"]]}
]});
let data = json!({"status": "active", "score": 95, "role": "admin"});
println!("realistic guard: {}", evaluate(&rule, &data, &ctx).unwrap()); }