use feature_flag::{FlagEvaluator, FlagSet, Subject};
fn main() -> Result<(), Box<dyn std::error::Error>> {
let raw = std::fs::read_to_string(concat!(
env!("CARGO_MANIFEST_DIR"),
"/examples/flagset.json"
))?;
let evaluator = FlagEvaluator::new(FlagSet::from_json(&raw)?);
let subjects = [
Subject::new("alice")
.with_attr("country", "US")
.with_attr("email", "alice@example.com"),
Subject::new("bob")
.with_attr("country", "DE")
.with_attr("email", "bob@example.com"),
Subject::new("carla")
.with_attr("country", "US")
.with_attr("email", "carla@kineticgain.com"),
];
for s in &subjects {
let r = evaluator.evaluate("new-checkout-flow", s)?;
println!(
"subject={:<8} country={:<3} -> {:?} (rule={:?}, reason={})",
s.id,
s.attr("country").and_then(|v| v.as_str()).unwrap_or("?"),
r.variant,
r.matched_rule_id.as_deref().unwrap_or("-"),
r.reason
);
}
Ok(())
}