SerializeRequestCallback.kt

  1. package com.hexagontk.rest

  2. import com.hexagontk.http.handlers.HttpCallback
  3. import com.hexagontk.http.handlers.HttpContext
  4. import com.hexagontk.serialization.SerializationManager
  5. import com.hexagontk.serialization.serialize

  6. // TODO Create SerializeRequestHandler like CorsHandler
  7. class SerializeRequestCallback : HttpCallback {

  8.     init {
  9.         check(SerializationManager.formats.isNotEmpty()) {
  10.             "Serialization callbacks require at least one registered format"
  11.         }
  12.     }

  13.     override fun invoke(context: HttpContext): HttpContext {
  14.         val requestBody = context.request.body

  15.         if (requestBody is String || requestBody is ByteArray)
  16.             return context

  17.         return context.request.contentType?.mediaType
  18.             ?.let(SerializationManager::formatOfOrNull)
  19.             ?.let { context.receive(body = requestBody.serialize(it)) }
  20.             ?: context
  21.     }
  22. }