///|
fn user_args() -> Array[String] {
  match @env.args() {
    [_, .. rest] => rest.to_owned()
    [] => []
  }
}

///|
fn fail(message : String) -> Unit {
  write_stderr("feedlens: " + message)
  @sys.exit(2)
}

///|
fn main {
  match @render.parse_args(user_args()) {
    Ok(Help) => println(@render.help_text())
    Ok(Parse(path, json)) =>
      try {
        let input = @fs.read_file_to_string(path)
        match @feedlens.parse(input) {
          Ok(feed) =>
            if json {
              println(@render.render_json(feed))
            } else {
              println(@render.render_human(feed))
            }
          Err(error) =>
            fail(
              "could not parse '" +
              path +
              "': " +
              @render.parse_error_text(error),
            )
        }
      } catch {
        @fs.IOError(message) =>
          fail("could not read '" + path + "': " + message)
      }
    Err(message) => fail(message + "; run with --help for usage")
  }
}