///|
fn write_cli_output(output : String) -> Unit raise {
  @miniio.stdout.write_text(output)
  if !output.has_suffix("\n") {
    @miniio.stdout.write_text("\n")
  }
}

///|
fn main {
  try {
    let command = parse_cli_command(runtime_cli_args(@miniio.args_get()))
    match command {
      ("scan", Some(options), None) => {
        let result = collect_directory_hits(options)
        write_cli_output(render_directory_scan_result(result))
      }
      ("docs-list", None, None) | ("docs-show", None, Some(_)) =>
        write_cli_output(render_docs_command(command))
      _ => fail("invalid CLI command")
    }
  } catch {
    CliError::Usage(message~, exit_code~) => {
      println(message)
      @miniio.exit(exit_code)
    }
    err => {
      println("\{to_repr(err)}")
      @miniio.exit(1)
    }
  }
}