///|
fn main {
  let rollout = @moonflags.Rollout(
    [
      @moonflags.WeightedVariant("control", 6000),
      @moonflags.WeightedVariant("beta", 4000),
    ],
    seed="checkout-v1",
  )
  let paid_rule = @moonflags.Rule(
    "paid-cn-users",
    conditions=[
      @moonflags.str_eq("country", "CN"),
      @moonflags.bool_eq("paid", true),
    ],
    rollout~,
    reason="paid_user_rollout",
  )
  let flag = @moonflags.Flag(
    "checkout_flow",
    ["control", "beta"],
    "control",
    rules=[paid_rule],
    fallthrough_variant="control",
  )
  let ctx = @moonflags.Context(user_key="demo-user-42")
    .with_str("country", "CN")
    .with_bool("paid", true)
  let result = flag.evaluate(ctx)
  println("MoonFlags example")
  println("flag: " + result.flag_key)
  println("variant: " + result.variant)
  println("reason: " + result.reason)
  println("bucket: " + show_bucket(result.bucket))
  println("diagnostics: " + @moonflags.validate_flag(flag).length().to_string())
}

///|
fn show_bucket(bucket : Int?) -> String {
  match bucket {
    Some(value) => value.to_string()
    None => "none"
  }
}