// FlowGate Demo — Builder + hooks
fn main {
let gate = @lib.new_builder()
.global(5).per_key(3).per_session(2).queue_size(10)
.on_block(fn(reason) { println(" [EVENT] Blocked: " + reason) })
.on_acquire(fn(key, session, msg) { println(" [EVENT] Acquired: key=" + key + " session=" + session + " " + msg) })
.build()
println("═══ FlowGate Demo ═══")
println("Config: global=5 per_key=3 per_session=2 queue=10")
println("")
println("── normal flow ──")
let r1 = gate.acquire("tool-a", "sess-1")
println(" acquire tool-a/sess-1: " + r1.unwrap())
gate.release("tool-a", "sess-1")
println(" released tool-a")
println("")
println("── fill global ──")
let _ = gate.acquire("a", "1")
let _ = gate.acquire("b", "2")
let _ = gate.acquire("c", "3")
let _ = gate.acquire("d", "4")
let _ = gate.acquire("e", "5")
let r_full = gate.acquire("f", "6")
match r_full {
Ok(_) => println(" UNEXPECTED: got slot")
Err(e) => println(" Expected: " + e)
}
println("")
println("── stats ──")
println(" " + gate.stats())
println(" Available: " + gate.available().to_string())
println(" Is full: " + gate.is_full().to_string())
}