init: added mainargs for port and host

This commit is contained in:
efim 2023-09-23 04:09:58 +00:00
parent d74df846f2
commit 6d5077159b
3 changed files with 68 additions and 32 deletions

View File

@ -4,9 +4,11 @@ val toolkit = "org.scala-lang" %% "toolkit" % toolkitV
val toolkitTest = "org.scala-lang" %% "toolkit-test" % toolkitV
val cask = "com.lihaoyi" %% "cask" % "0.9.1"
val mainargs = "com.lihaoyi" %% "mainargs" % "0.5.4"
ThisBuild / scalaVersion := "3.2.2"
libraryDependencies += cask
libraryDependencies += mainargs
libraryDependencies += toolkit
libraryDependencies += (toolkitTest % Test)

View File

@ -4,40 +4,27 @@ import org.thymeleaf.templatemode.TemplateMode
import org.thymeleaf.TemplateEngine
import org.thymeleaf.context.Context
import cask.model.Response
object MinimalApplication extends cask.MainRoutes{
@cask.get("/")
def hello() = {
val context = new Context()
val yo = engine.process("lala", context)
Response(
yo,
headers = Seq("Content-Type" -> "text/html; charset=utf-8")
)
import mainargs.{main, arg, ParserForMethods, Flag}
object MinimalApplication extends cask.Routes{
@main
def run(
@arg(name="port", short='p', doc="Port on which server will start service")
portArg: Int = 8080,
@arg(name="host", doc="Host on which server will start serving")
hostArg: String = "localhost"
) = {
println(s"Will start server on ${hostArg}:${portArg}")
val server = new cask.Main {
override def allRoutes: Seq[cask.main.Routes] = Seq(Routes())
override def port: Int = portArg
override def host: String = hostArg
}
server.main(Array.empty)
}
@cask.post("/do-thing")
def doThing(request: cask.Request) = {
request.text().reverse
}
def main(args: Array[String]): Unit = ParserForMethods(this).runOrExit(args)
@cask.staticResources("public")
def giveStaticResources() = "public"
initialize()
def buildTemplateEngine(): TemplateEngine = {
import org.thymeleaf.templateresolver.ClassLoaderTemplateResolver
val templateResolver = new ClassLoaderTemplateResolver()
templateResolver.setTemplateMode(TemplateMode.HTML)
templateResolver.setPrefix("/templates/")
templateResolver.setSuffix(".html")
templateResolver.setCacheTTLMs(3600000L);
val templateEngine = new TemplateEngine()
templateEngine.setTemplateResolver(templateResolver)
templateEngine
}
val engine: TemplateEngine = buildTemplateEngine()
}

View File

@ -0,0 +1,47 @@
package example
import cask.model.Response
import org.thymeleaf.templateresolver.ClassLoaderTemplateResolver
import org.thymeleaf.TemplateEngine
import org.thymeleaf.context.Context
import org.thymeleaf.templatemode.TemplateMode
case class Routes()(implicit cc: castor.Context, log: cask.Logger)
extends cask.Routes {
def buildTemplateEngine(): TemplateEngine = {
val templateResolver = new ClassLoaderTemplateResolver()
templateResolver.setTemplateMode(TemplateMode.HTML)
templateResolver.setPrefix("/templates/")
templateResolver.setSuffix(".html")
templateResolver.setCacheTTLMs(3600000L);
val templateEngine = new TemplateEngine()
templateEngine.setTemplateResolver(templateResolver)
templateEngine
}
val engine: TemplateEngine = buildTemplateEngine()
@cask.get("/")
def hello() = {
val context = new Context()
val yo = engine.process("lala", context)
Response(
yo,
headers = Seq("Content-Type" -> "text/html; charset=utf-8")
)
}
@cask.post("/do-thing")
def doThing(request: cask.Request) = {
request.text().reverse
}
@cask.staticResources("public")
def giveStaticResources() = "public"
initialize()
}