JsonFormat.kt

  1. package com.hexagontk.serialization.dsl.json

  2. import com.dslplatform.json.DslJson
  3. import com.dslplatform.json.PrettifyOutputStream
  4. import com.dslplatform.json.runtime.Settings
  5. import com.hexagontk.core.media.APPLICATION_JSON
  6. import com.hexagontk.core.media.MediaType
  7. import com.hexagontk.serialization.SerializationFormat
  8. import java.io.InputStream
  9. import java.io.OutputStream

  10. open class JsonFormat(private val prettyPrint: Boolean = true) : SerializationFormat {
  11.     override val textFormat: Boolean = true
  12.     override val mediaType: MediaType = APPLICATION_JSON

  13.     private val dslJson: DslJson<Any> =
  14.         DslJson(Settings.withRuntime())

  15.     override fun serialize(instance: Any, output: OutputStream) {
  16.         val stream = if (prettyPrint) PrettifyOutputStream(output) else output
  17.         dslJson.serialize(instance, stream)
  18.     }

  19.     override fun parse(input: InputStream): Any =
  20.         dslJson.deserialize(Any::class.java, input) ?: error("Error parsing input")
  21. }