ValueMapper
Provides utility for mapping option values and arguments.
import little.cli.{ *, given }
import Cli.{ application, option }
case class KeepAlive(idleTimeout: Int, maxRequests: Int)
// Define how to map value to KeepAlive
given ValueMapper[KeepAlive] =
_.split(":") match
case Array(timeout, max) => KeepAlive(timeout.toInt, max.toInt)
val app = application("start-server [ options ... ] port",
option("d", "directory", true, "Location of public files directory"),
option("k", "keep-alive", true, "Allow persistent connections").argName("timeout:max")
)
val cmd = app.parse("-d ./public_html --keep-alive 5:10 8080".split("\\s+"))
// Map keep-alive option
val keepAlive = cmd.mapOptionValue[KeepAlive]("keep-alive")
// Map directory option File
val directory = cmd.mapOptionValue[java.io.File]("directory")
// Map port argument via Int
val port = cmd.mapArg[Int](0)
class Object
trait Matchable
class Any