///|
fn main {
let json_config =
#|{
#| "flags": [
#| {
#| "name": "multivariate_promo_banner",
#| "enabled": true,
#| "default_enabled": false,
#| "rollout": 100,
#| "salt": "promo_salt",
#| "is_multivariate": true,
#| "default_variant": "control",
#| "variants": [
#| { "name": "control", "weight": 50 },
#| { "name": "treatment_red", "weight": 30 },
#| { "name": "treatment_blue", "weight": 20 }
#| ],
#| "rules": [
#| { "type": "AllowVariant", "subject": "vip_user_1", "variant": "treatment_blue" },
#| { "type": "WhenVariant", "key": "plan", "op": "In", "value": "pro,enterprise", "variant": "treatment_red" }
#| ]
#| },
#| {
#| "name": "canary_release",
#| "enabled": true,
#| "default_enabled": false,
#| "rollout": 35,
#| "salt": "canary_salt",
#| "is_multivariate": false,
#| "default_variant": "off",
#| "variants": [],
#| "rules": [
#| { "type": "Deny", "subject": "bad_actor" },
#| { "type": "When", "key": "age", "op": ">=", "value": "18" }
#| ]
#| }
#| ]
#|}
let provider = @moonflagkit.JsonConfigProvider::new(json_config)
match provider.load_flags() {
Ok(flags) => run_demo(flags)
Err(err) => println("Error loading configuration: " + err)
}
}
///|
fn run_demo(flags : Array[@moonflagkit.Flag]) -> Unit {
println("================================================")
println(" MoonFlagKit Integration Demo ")
println("================================================")
println("Loaded flags count: " + flags.length().to_string())
// Test User 1: VIP user getting specific variant
let user1 : @moonflagkit.EvalContext = {
subject: "vip_user_1",
environment: "production",
attributes: [{ key: "plan", value: "free" }, { key: "age", value: "25" }],
}
// Test User 2: Pro plan user matching condition variant
let user2 : @moonflagkit.EvalContext = {
subject: "user_bob",
environment: "production",
attributes: [{ key: "plan", value: "pro" }, { key: "age", value: "20" }],
}
// Test User 3: Underage user blocked by activation condition
let user3 : @moonflagkit.EvalContext = {
subject: "user_kid",
environment: "production",
attributes: [{ key: "plan", value: "free" }, { key: "age", value: "16" }],
}
// Test User 4: Bad actor denied explicitly
let user4 : @moonflagkit.EvalContext = {
subject: "bad_actor",
environment: "production",
attributes: [{ key: "plan", value: "free" }, { key: "age", value: "30" }],
}
show_decisions(flags, user1)
show_decisions(flags, user2)
show_decisions(flags, user3)
show_decisions(flags, user4)
println("\n--- Configuration Diagnostics ---")
let diagnostics = @moonflagkit.validate_flags(flags)
if diagnostics.length() == 0 {
println("No diagnostics warning: configuration is valid.")
} else {
for diag in diagnostics {
println("[" + diag.kind + "] Flag: " + diag.flag + " -> " + diag.message)
}
}
}
///|
fn show_decisions(
flags : Array[@moonflagkit.Flag],
context : @moonflagkit.EvalContext,
) -> Unit {
println("\nEvaluating for Subject: " + context.subject)
for decision in @moonflagkit.evaluate_all(flags, context) {
println(@moonflagkit.explain(decision))
}
}