case class Config(name: String)
val parser = new OptionParser[Config]("scopt-example") {
opt[String]('n', "name").required().action((value, config) => config.copy(name = value)).text("Name parameter")
}
parser.parse(args, Config()) match {
case Some(config) =>
println(s"Hello, ${config.name}!")
case None =>
parser.showUsage()
}