///|
async fn main {
  let args = @env.args()
  guard args.length() == 2 else {
    fail("usage: moon run examples/header-scan -- archive.7z")
  }
  let archive = @host.open_file(args[1])
  let files = archive.entries().filter(entry => entry.kind == File)
  let requests = files.map(entry => {
    @archive.RangeRequest::new(
      entry.id,
      offset=0,
      length=if entry.size < 16 { entry.size } else { 16 },
    )
  })
  let reader = archive.reader(cache_bytes=0)
  let prefixes = reader.read_ranges(requests)
  for i, prefix in prefixes {
    println("\{files[i].id}\t\{Repr(files[i].name)}\t\{Repr(prefix)}")
  }
  println("Decode attempts: \{reader.stats().decode_attempts}")
}