SerializationFormat.kt

  1. package com.hexagonkt.serialization

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

  7. interface SerializationFormat {

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

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

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

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

  22.     fun serialize(instance: Any): String {
  23.         check(textFormat) { SERIALIZATION_ERROR }
  24.         return String(serializeBytes(instance))
  25.     }

  26.     fun parse(input: String): Any {
  27.         check(textFormat) { PARSING_ERROR }
  28.         return parse(input.toStream())
  29.     }
  30. }