dave
04/11/2019, 6:49 PMimport org.http4k.contract.ContractRoute
import org.http4k.contract.bindContract
import org.http4k.contract.contract
import org.http4k.core.Body
import org.http4k.core.HttpHandler
import org.http4k.core.Method
import org.http4k.core.Response
import org.http4k.core.Status
import org.http4k.core.Uri
import org.http4k.core.then
import org.http4k.core.with
import org.http4k.filter.ClientFilters
import org.http4k.filter.DebuggingFilters
import org.http4k.format.Jackson.auto
inline operator fun <reified IN : Any, reified OUT : Any> HttpHandler.invoke(route: ContractRoute, baseUrl: String, requestBody: IN): OUT {
val requestLens = Body.auto<IN>().toLens()
val responselens = Body.auto<OUT>().toLens()
return responselens(
invoke(route.newRequest(Uri.of(baseUrl)).with(requestLens of requestBody))
)
}
data class Hello(val value: String)
fun main() {
val route = "/echo" bindContract <http://Method.POST|Method.POST> to {
Response(Status.OK).body(it.body)
}
val contract = contract {
routes += route
}
val app = DebuggingFilters.PrintRequestAndResponse()
.then(ClientFilters.BearerAuth("sometoken"))
.then(contract)
val out: Hello = app(route, "<http://localhost:9000>", Hello("there"))
println(out)
}