SerializationManager.kt

  1. package com.hexagontk.serialization

  2. import com.hexagontk.core.media.MediaType

  3. object SerializationManager {

  4.     private var formatsMap: Map<MediaType, SerializationFormat> = emptyMap()

  5.     var formats: Set<SerializationFormat> = emptySet()
  6.         set(value) {
  7.             formatsMap = value.associateBy { it.mediaType }
  8.             field = value
  9.         }

  10.     fun formatOfOrNull(mediaType: MediaType): SerializationFormat? =
  11.         formatsMap[mediaType]

  12.     fun formatOf(mediaType: MediaType): SerializationFormat =
  13.         formatOfOrNull(mediaType) ?: error(formatNotFound(mediaType.fullType))

  14.     private fun formatNotFound(fullType: String): String {
  15.         val formatList = formats.joinToString(", ") { it.mediaType.fullType }
  16.         return "Cannot find serialization format for: $fullType. Available: $formatList"
  17.     }
  18. }