///|
fn main {
  try {
    let dispatch = @osc.Dispatcher::new()
    dispatch.add(1, "/mixer/left/gain", signature=Some(",f"))
    dispatch.add(2, "/mixer/right/gain", signature=Some(",f"))
    let request = @osc.Message::{
      address: "/mixer/{left,right}/gain",
      arguments: [@osc.float_argument(0.5)],
    }
    let raw = @osc.encode_message(request)
    let plan = dispatch.plan(@osc.decode_message(raw))
    assert_eq(plan.accepted.map(x => x.id), [1, 2])
    assert_eq(plan.rejected.length(), 0)
    println("audio: typed gain request accepted by 2 destinations")
  } catch {
    _ => abort("audio workflow failed")
  }
}