SerializationFormat.kt

  1. package com.hexagontk.serialization

  2. import com.hexagontk.core.assertEnabled
  3. import com.hexagontk.core.text.toStream
  4. import com.hexagontk.core.media.MediaType
  5. import java.io.ByteArrayOutputStream
  6. import java.io.InputStream
  7. import java.io.OutputStream

  8. interface SerializationFormat {

  9.     private companion object {
  10.         const val PARSING_ERROR = "String parsing only possible for text serialization formats"
  11.         const val SERIALIZATION_ERROR =
  12.             "String serialization only possible for text serialization formats"
  13.     }

  14.     val textFormat: Boolean
  15.     val mediaType: MediaType

  16.     fun serialize(instance: Any, output: OutputStream)
  17.     fun parse(input: InputStream): Any

  18.     fun serializeBytes(instance: Any): ByteArray =
  19.         ByteArrayOutputStream().let {
  20.             serialize(instance, it)
  21.             it.toByteArray()
  22.         }

  23.     fun serialize(instance: Any): String {
  24.         if (assertEnabled)
  25.             check(textFormat) { SERIALIZATION_ERROR }
  26.         return String(serializeBytes(instance))
  27.     }

  28.     fun parse(input: String): Any {
  29.         if (assertEnabled)
  30.             check(textFormat) { PARSING_ERROR }
  31.         return parse(input.toStream())
  32.     }
  33. }