value
}
}
-
-@Serializable
-private data class MapAsListEntry<K, V>(val key: K, val value: V) {
- constructor(entry: Map.Entry<K, V>) : this(entry.key, entry.value)
-
- fun toPair() = key to value
-}
-
-@OptIn(ExperimentalSerializationApi::class)
-class MapAsListSerializer<K, V>(keySerializer: KSerializer<K>, valueSerializer: KSerializer<V>) : KSerializer<Map<K, V>> {
- private val inner = ListSerializer(MapAsListEntry.serializer(keySerializer, valueSerializer))
-
- override val descriptor: SerialDescriptor = SerialDescriptor("MapAsListSerializer<${keySerializer.descriptor.serialName}, ${valueSerializer.descriptor.serialName}>", inner.descriptor)
-
- override fun serialize(encoder: Encoder, value: Map<K, V>) {
- inner.serialize(encoder, value.map { MapAsListEntry(it) })
- }
-
- override fun deserialize(decoder: Decoder): Map<K, V> {
- return inner.deserialize(decoder).associate { it.toPair() }
- }
-}