summaryrefslogtreecommitdiff
path: root/cask/src/cask/endpoints/ParamReader.scala
blob: f1ec0bf81f34ae6f0ba95e93505d95f58f6d0693 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
package cask.endpoints

import cask.internal.Router
import cask.model.ParamContext
import io.undertow.server.HttpServerExchange
import io.undertow.server.handlers.form.{FormData, FormParserFactory}

abstract class ParamReader[T] extends Router.ArgReader[Unit, T, cask.model.ParamContext]{
  def arity: Int
  def read(ctx: cask.model.ParamContext, label: String, v: Unit): T
}
object ParamReader{
  class NilParam[T](f: (ParamContext, String) => T) extends ParamReader[T]{
    def arity = 0
    def read(ctx: cask.model.ParamContext, label: String, v: Unit): T = f(ctx, label)
  }
  implicit object HttpExchangeParam extends NilParam[HttpServerExchange]((ctx, label) => ctx.exchange)

  implicit object FormDataParam extends NilParam[FormData]((ctx, label) =>
    FormParserFactory.builder().build().createParser(ctx.exchange).parseBlocking()
  )
}