use fsm_guards::{evaluate, EvalCtx, GuardError};
use serde_json::json;
fn main() {
let ctx = EvalCtx::new();
let approved = evaluate(
&json!({"==": [{"var": "status"}, "approved"]}),
&json!({"status": "approved"}),
&ctx,
)
.unwrap();
println!("approved: {approved}");
let ready = evaluate(
&json!({"and": [
{"==": [{"var": "status"}, "active"]},
{">=": [{"var": "score"}, 80]},
{"in": [{"var": "role"}, ["admin", "operator"]]}
]}),
&json!({"status": "active", "score": 95, "role": "admin"}),
&ctx,
)
.unwrap();
println!("ready: {ready}");
match evaluate(
&json!({"var": "nonexistent"}),
&json!({"status": "active"}),
&ctx,
) {
Err(GuardError::MissingVar(path)) => println!("missing var: {path}"),
other => println!("unexpected: {other:?}"),
}
}