scala
val nameOption: Opts[String] = Opts.option[String]("name", help = "Your name", metavar = "NAME")
val verboseFlag: Opts[Boolean] = Opts.flag("verbose", help = "Enable verbose mode")
scala
val helloCommand: Command[Unit] = Command("hello", "Say hello") {
val nameOption: Opts[String] = Opts.option[String]("name", help = "Your name", metavar = "NAME")
for {
name <- nameOption
} yield {
println(s"Hello, $name!")
}
}
val goodbyeCommand: Command[Unit] = Command("goodbye", "Say goodbye") {
val nameOption: Opts[String] = Opts.option[String]("name", help = "Your name", metavar = "NAME")
for {
name <- nameOption
} yield {
println(s"Goodbye, $name!")
}
}
val commands: Command[Unit] = helloCommand orElse goodbyeCommand
scala
val userArgs: List[String] = List("hello", "--name", "Alice")
commands.parse(userArgs) match {
case Left(help) => help.print()
case Right(action) => action.run()
}
scala
import com.monovore.decline._
object MyCli extends CommandApp(
name = "my-cli",
header = "A simple command-line application.",
main = {
val helloCommand: Command[Unit] = Command("hello", "Say hello") {
val nameOption: Opts[String] = Opts.option[String]("name", help = "Your name", metavar = "NAME")
for {
name <- nameOption
} yield {
println(s"Hello, $name!")
}
}
val goodbyeCommand: Command[Unit] = Command("goodbye", "Say goodbye") {
val nameOption: Opts[String] = Opts.option[String]("name", help = "Your name", metavar = "NAME")
for {
name <- nameOption
} yield {
println(s"Goodbye, $name!")
}
}
helloCommand orElse goodbyeCommand
}
)
scala
libraryDependencies += "com.monovore" %% "decline" % "1.4.0"