HandlerBuilder.kt

  1. package com.hexagonkt.http.handlers

  2. import com.hexagonkt.http.model.HttpMethod
  3. import com.hexagonkt.http.model.HttpStatus
  4. import kotlin.reflect.KClass

  5. class HandlerBuilder(var handlers: List<HttpHandler> = emptyList()) {

  6.     fun handler(contextPath: String = ""): HttpHandler =
  7.         if (handlers.size == 1) handlers[0].addPrefix(contextPath)
  8.         else PathHandler(contextPath, handlers)

  9.     fun use(handler: HttpHandler) {
  10.         this.handlers += handler
  11.     }

  12.     fun path(pattern: String, block: HandlerBuilder.() -> Unit) {
  13.         use(com.hexagonkt.http.handlers.path(pattern, block))
  14.     }

  15.     fun path(pattern: String, pathHandler: PathHandler) {
  16.         use(pathHandler.addPrefix(pattern))
  17.     }

  18.     fun path(pattern: String, pathHandlers: List<HttpHandler>) {
  19.         use(PathHandler(pattern, pathHandlers))
  20.     }

  21.     fun path(pattern: String, vararg pathHandlers: HttpHandler) {
  22.         path(pattern, pathHandlers.toList())
  23.     }

  24.     fun on(
  25.         predicate: HttpPredicate = HttpPredicate(),
  26.         callback: HttpCallbackType
  27.     ) {
  28.         use(OnHandler(predicate, callback))
  29.     }

  30.     fun on(
  31.         methods: Set<HttpMethod> = emptySet(),
  32.         pattern: String = "",
  33.         exception: KClass<out Exception>? = null,
  34.         status: HttpStatus? = null,
  35.         callback: HttpCallbackType,
  36.     ) {
  37.         use(OnHandler(methods, pattern, exception, status, callback))
  38.     }

  39.     fun on(method: HttpMethod, pattern: String = "", callback: HttpCallbackType) {
  40.         use(OnHandler(method, pattern, callback))
  41.     }

  42.     fun on(pattern: String, callback: HttpCallbackType) {
  43.         use(OnHandler(pattern, callback))
  44.     }

  45.     fun filter(
  46.         predicate: HttpPredicate = HttpPredicate(),
  47.         callback: HttpCallbackType
  48.     ) {
  49.         use(FilterHandler(predicate, callback))
  50.     }

  51.     fun filter(
  52.         methods: Set<HttpMethod> = emptySet(),
  53.         pattern: String = "",
  54.         exception: KClass<out Exception>? = null,
  55.         status: HttpStatus? = null,
  56.         callback: HttpCallbackType,
  57.     ) {
  58.         use(
  59.             FilterHandler(methods, pattern, exception, status, callback)
  60.         )
  61.     }

  62.     fun filter(method: HttpMethod, pattern: String = "", callback: HttpCallbackType) {
  63.         use(FilterHandler(method, pattern, callback))
  64.     }

  65.     fun filter(pattern: String, callback: HttpCallbackType) {
  66.         use(FilterHandler(pattern, callback))
  67.     }

  68.     fun after(
  69.         predicate: HttpPredicate = HttpPredicate(),
  70.         callback: HttpCallbackType
  71.     ) {
  72.         use(AfterHandler(predicate, callback))
  73.     }

  74.     fun after(
  75.         methods: Set<HttpMethod> = emptySet(),
  76.         pattern: String = "",
  77.         exception: KClass<out Exception>? = null,
  78.         status: HttpStatus? = null,
  79.         callback: HttpCallbackType,
  80.     ) {
  81.         use(AfterHandler(methods, pattern, exception, status, callback))
  82.     }

  83.     fun after(method: HttpMethod, pattern: String = "", callback: HttpCallbackType) {
  84.         use(AfterHandler(method, pattern, callback))
  85.     }

  86.     fun after(pattern: String, callback: HttpCallbackType) {
  87.         use(AfterHandler(pattern, callback))
  88.     }

  89.     fun before(
  90.         predicate: HttpPredicate = HttpPredicate(),
  91.         callback: HttpCallbackType
  92.     ) {
  93.         use(BeforeHandler(predicate, callback))
  94.     }

  95.     fun before(
  96.         methods: Set<HttpMethod> = emptySet(),
  97.         pattern: String = "",
  98.         exception: KClass<out Exception>? = null,
  99.         status: HttpStatus? = null,
  100.         callback: HttpCallbackType,
  101.     ) {
  102.         use(BeforeHandler(methods, pattern, exception, status, callback))
  103.     }

  104.     fun before(method: HttpMethod, pattern: String = "", callback: HttpCallbackType) {
  105.         use(BeforeHandler(method, pattern, callback))
  106.     }

  107.     fun before(pattern: String, callback: HttpCallbackType) {
  108.         use(BeforeHandler(pattern, callback))
  109.     }

  110.     fun <T : Exception> exception(
  111.         exception: KClass<T>, clear: Boolean = true, callback: HttpExceptionCallbackType<T>
  112.     ) {
  113.         use(ExceptionHandler(exception, clear, callback))
  114.     }

  115.     inline fun <reified T : Exception> exception(
  116.         clear: Boolean = true, noinline callback: HttpExceptionCallbackType<T>,
  117.     ) {
  118.         use(ExceptionHandler(T::class, clear, callback))
  119.     }

  120.     fun get(pattern: String = "", callback: HttpCallbackType) {
  121.         use(Get(pattern, callback))
  122.     }

  123.     fun ws(pattern: String = "", callback: HttpCallbackType) {
  124.         use(Ws(pattern, callback))
  125.     }

  126.     fun head(pattern: String = "", callback: HttpCallbackType) {
  127.         use(Head(pattern, callback))
  128.     }

  129.     fun post(pattern: String = "", callback: HttpCallbackType) {
  130.         use(Post(pattern, callback))
  131.     }

  132.     fun put(pattern: String = "", callback: HttpCallbackType) {
  133.         use(Put(pattern, callback))
  134.     }

  135.     fun delete(pattern: String = "", callback: HttpCallbackType) {
  136.         use(Delete(pattern, callback))
  137.     }

  138.     fun trace(pattern: String = "", callback: HttpCallbackType) {
  139.         use(Trace(pattern, callback))
  140.     }

  141.     fun options(pattern: String = "", callback: HttpCallbackType) {
  142.         use(Options(pattern, callback))
  143.     }

  144.     fun patch(pattern: String = "", callback: HttpCallbackType) {
  145.         use(Patch(pattern, callback))
  146.     }
  147. }