HttpHandler.kt
- package com.hexagontk.http.handlers
- import com.hexagontk.handlers.Handler
- import com.hexagontk.http.model.*
- import com.hexagontk.http.model.HttpCall
- interface HttpHandler : Handler<HttpCall> {
- val handlerPredicate: HttpPredicate
- fun addPrefix(prefix: String): HttpHandler
- fun byMethod(): Map<HttpMethod, HttpHandler> =
- handlerPredicate.methods.associateWith { filter(it) }
- fun filter(method: HttpMethod): HttpHandler =
- when (this) {
- is PathHandler ->
- PathHandler(
- handlerPredicate.clearMethods(),
- handlers
- .filter {
- val methods = it.handlerPredicate.methods
- method in methods || methods.isEmpty()
- }
- .map { it.filter(method) }
- )
- is OnHandler ->
- OnHandler(handlerPredicate.clearMethods(), block)
- is FilterHandler ->
- FilterHandler(handlerPredicate.clearMethods(), block)
- is AfterHandler ->
- AfterHandler(handlerPredicate.clearMethods(), block)
- is BeforeHandler ->
- BeforeHandler(handlerPredicate.clearMethods(), block)
- else ->
- this
- }
- fun processHttp(context: HttpContext): HttpContext =
- if (handlerPredicate(context)) process(context) as HttpContext
- else context
- fun process(request: HttpRequestPort): HttpContext =
- processHttp(HttpContext(HttpCall(request = request), handlerPredicate))
- }