// This file was automatically generated from formats.md by Knit tool. Do not edit. package example.exampleFormats12 import kotlinx.serialization.* import kotlinx.serialization.descriptors.* import kotlinx.serialization.encoding.* import kotlinx.serialization.modules.* class ListEncoder : AbstractEncoder() { val list = mutableListOf() override val serializersModule: SerializersModule = EmptySerializersModule() override fun encodeValue(value: Any) { list.add(value) } } fun encodeToList(serializer: SerializationStrategy, value: T): List { val encoder = ListEncoder() encoder.encodeSerializableValue(serializer, value) return encoder.list } inline fun encodeToList(value: T) = encodeToList(serializer(), value) class ListDecoder(val list: ArrayDeque) : AbstractDecoder() { private var elementIndex = 0 override val serializersModule: SerializersModule = EmptySerializersModule() override fun decodeValue(): Any = list.removeFirst() override fun decodeElementIndex(descriptor: SerialDescriptor): Int { if (elementIndex == descriptor.elementsCount) return CompositeDecoder.DECODE_DONE return elementIndex++ } override fun beginStructure(descriptor: SerialDescriptor): CompositeDecoder = ListDecoder(list) override fun decodeSequentially(): Boolean = true } fun decodeFromList(list: List, deserializer: DeserializationStrategy): T { val decoder = ListDecoder(ArrayDeque(list)) return decoder.decodeSerializableValue(deserializer) } inline fun decodeFromList(list: List): T = decodeFromList(list, serializer()) @Serializable data class Project(val name: String, val owner: User, val votes: Int) @Serializable data class User(val name: String) fun main() { val data = Project("kotlinx.serialization", User("kotlin"), 9000) val list = encodeToList(data) println(list) val obj = decodeFromList(list) println(obj) }