aboutsummaryrefslogtreecommitdiff
path: root/src/main/scala/package.scala
blob: f81397113506f81d1882c94f5022cf7c7fa65dfe (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
package commando

class CommandBuilder(name: String, params: Seq[Parameter]) {

  private def optionals = params.collect{
    case opt: Optional => opt
  }.toSet
  private def positionals = params.collect{
    case pos: Positional => pos
  }

  def run(action: Command.Arguments => Unit): Command =
    Command(name, optionals, positionals, Set.empty, Some(action))

  def sub(commands: Command*): Command =
    Command(name, optionals, positionals, commands.toSet, None)

}



object `package` {

  val DefaultErrorHandler: (Command, String) => Unit = (command: Command, err: String) => {
    System.err.println(s"${command.name}: $err")
    System.exit(2)
  }



  def parse(arguments: Seq[String],
            command: Command, onError: (Command, String) => Unit = DefaultErrorHandler): Unit =
    Parser.parse(arguments, command, onError)

  def cmd(name: String)(params: Parameter*): CommandBuilder = new CommandBuilder(name, params)
  def opt(name: String, short: Char = '\u0000', param: (String, Boolean) = ("", false)): Optional =
    Optional(
      name,
      if (short == '\u0000') None else Some(short),
      argumentAllowed = (param != ("", false)),
      argumentRequired = (param != ("", false)) && param._2,
      parameterName = if(param._1 == "") "param" else param._1
    )

  def pos(name: String, required: Boolean = true): Positional = Positional(name, required)


}