RecordCallback.kt

package com.hexagontk.rest.tools

import com.hexagontk.http.handlers.HttpContext
import com.hexagontk.http.model.HttpCall

/**
 * Callback that records server requests and responses (the whole event context). The result is
 * taken before any subsequent filter is applied (just how it was received).
 */
class RecordCallback : (HttpContext) -> HttpContext {

    var calls: List<HttpContext> = emptyList()

    override fun invoke(context: HttpContext): HttpContext {

        val result = context.next()
        calls += context
            .with(event = HttpCall(result.event.request, response = result.response)) as HttpContext

        return result
    }
}