///|
fn main raise {
  let schema = @xdr.parse_schema(
    "const MAX = 8; enum State { READY=1, DONE=2 }; struct Sample { unsigned hyper sequence; string label; double values<4>; State state; };",
  )
  let sample = @xdr.VStruct([
    ("sequence", @xdr.VUHyper(18446744073709551615UL)),
    ("label", @xdr.VString("sensor")),
    ("values", @xdr.VArray([@xdr.VDouble(1.25), @xdr.VDouble(-2.5)])),
    ("state", @xdr.VEnum(1)),
  ])
  let bytes = @xdr.encode(schema, "Sample", sample)
  let restored = @xdr.decode(schema, "Sample", bytes)
  assert_true(@xdr.encode(schema, "Sample", restored) == bytes)
  assert_eq(bytes.length(), 44)
  println(
    "schema workflow: exact unsigned64, bounded record and numeric array; 44 bytes",
  )
  println(@xdr.to_hex(bytes))
}