HttpHandler.kt
- package com.hexagonkt.http.handlers
- import com.hexagonkt.handlers.Handler
- import com.hexagonkt.http.model.*
- import com.hexagonkt.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 ->
- copy(
- handlerPredicate = handlerPredicate.clearMethods(),
- handlers = handlers
- .filter {
- val methods = it.handlerPredicate.methods
- method in methods || methods.isEmpty()
- }
- .map { it.filter(method) }
- )
- is OnHandler ->
- copy(handlerPredicate = handlerPredicate.clearMethods())
- is FilterHandler ->
- copy(handlerPredicate = handlerPredicate.clearMethods())
- is AfterHandler ->
- copy(handlerPredicate = handlerPredicate.clearMethods())
- is BeforeHandler ->
- copy(handlerPredicate = handlerPredicate.clearMethods())
- 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))
- }