//> using dep com.lihaoyi::cask:0.9.1 //> using dep com.lihaoyi::mainargs:0.5.0 //> using dep org.thymeleaf:thymeleaf:3.1.1.RELEASE package example import mainargs.{main, arg, ParserForMethods} object Main { @main def run( @arg( name = "post", short = 'p', doc = "Port on which server will start serving." ) portArg: Int = 8080, @arg(name = "host", doc = "Host on which server will start serving.") hostArg: String = "localhost" ): Unit = { println(s"Will start server on ${hostArg}:${portArg}") val server = new cask.Main { override val allRoutes = Seq(AppRoutes()) override def port = portArg override def host = hostArg } server.main(Array.empty) } def main(args: Array[String]): Unit = ParserForMethods(this).runOrExit(args) case class AppRoutes()(implicit cc: castor.Context, log: cask.Logger) extends cask.Routes { @cask.get("/") def index() = { import org.thymeleaf.context.Context import org.thymeleaf.templateresolver.ClassLoaderTemplateResolver import org.thymeleaf.TemplateEngine val templateResolver = new ClassLoaderTemplateResolver() templateResolver.setPrefix("templates/"); templateResolver.setSuffix(".html") templateResolver.setTemplateMode("HTML5") val templateEngine = new TemplateEngine() templateEngine.setTemplateResolver(templateResolver) val a = 11 val context = new Context() context.setVariable("name", s"Johny $a") val result = templateEngine.process("index", context) cask.Response( result, headers = Seq("Content-Type" -> "text/html;charset=UTF-8") ) } @cask.staticFiles("/dist") // this is what path gets matched def distFiles() = "dist" @cask.staticFiles("/public") // this is what path gets matched def publicFiles() = "public" initialize() } }