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
49
50
|
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)
}
|