///|
fn json_requested(args : Array[String]) -> Bool {
  args.any(arg => arg == "--json" || arg.has_prefix("--json="))
}

///|
fn option_parts(argument : String) -> (String, String?) {
  if argument.has_prefix("--") {
    match argument.split_once("=") {
      Some((name, value)) => (name.to_owned(), Some(value.to_owned()))
      None => (argument, None)
    }
  } else {
    (argument, None)
  }
}

///|
fn option_value(
  args : Array[String],
  index : Int,
  inline : String?,
  name : String,
) -> Result[(String, Int), String] {
  match inline {
    Some("") => Err("missing value for " + name)
    Some(value) => Ok((value, index + 1))
    None if index + 1 >= args.length() => Err("missing value for " + name)
    None => Ok((args[index + 1], index + 2))
  }
}

///|
fn flag_without_value(inline : String?, name : String) -> Result[Unit, String] {
  match inline {
    Some(_) => Err(name + " does not take a value")
    None => Ok(())
  }
}