///|
pub fn run_command(args : Array[String]) -> Result[String, IbanError] {
  if args.is_empty() {
    return Err(MissingOperand("command"))
  }
  match args[0] {
    "validate" =>
      if args.length() < 2 {
        Err(MissingOperand("iban"))
      } else {
        match parse(args[1]) {
          Ok(iban) => Ok("valid \{iban.pretty()}")
          Err(err) => Err(err)
        }
      }
    "format" =>
      if args.length() < 2 {
        Err(MissingOperand("iban"))
      } else {
        match parse(args[1]) {
          Ok(iban) => Ok(iban.pretty())
          Err(err) => Err(err)
        }
      }
    "parse" =>
      if args.length() < 2 {
        Err(MissingOperand("iban"))
      } else {
        match parse(args[1]) {
          Ok(_) => Ok(explain(args[1]))
          Err(err) => Err(err)
        }
      }
    "explain" =>
      if args.length() < 2 {
        Err(MissingOperand("iban"))
      } else {
        Ok(explain(args[1]))
      }
    "build" =>
      if args.length() < 3 {
        Err(MissingOperand("country-and-bban"))
      } else {
        match build(args[1], args[2]) {
          Ok(iban) => Ok(iban.pretty())
          Err(err) => Err(err)
        }
      }
    "checksum" =>
      if args.length() < 2 {
        Err(MissingOperand("iban"))
      } else {
        match checksum_remainder(args[1]) {
          Ok(rem) => Ok("remainder=\{rem}")
          Err(err) => Err(err)
        }
      }
    "countries" => Ok(registered_countries().join(","))
    other => Err(UnknownCommand(other))
  }
}