1*57b5a4a6SAndroid Build Coastguard Worker // This file was automatically generated from formats.md by Knit tool. Do not edit. 2*57b5a4a6SAndroid Build Coastguard Worker package example.exampleFormats12 3*57b5a4a6SAndroid Build Coastguard Worker 4*57b5a4a6SAndroid Build Coastguard Worker import kotlinx.serialization.* 5*57b5a4a6SAndroid Build Coastguard Worker import kotlinx.serialization.descriptors.* 6*57b5a4a6SAndroid Build Coastguard Worker import kotlinx.serialization.encoding.* 7*57b5a4a6SAndroid Build Coastguard Worker import kotlinx.serialization.modules.* 8*57b5a4a6SAndroid Build Coastguard Worker 9*57b5a4a6SAndroid Build Coastguard Worker class ListEncoder : AbstractEncoder() { 10*57b5a4a6SAndroid Build Coastguard Worker val list = mutableListOf<Any>() 11*57b5a4a6SAndroid Build Coastguard Worker 12*57b5a4a6SAndroid Build Coastguard Worker override val serializersModule: SerializersModule = EmptySerializersModule() 13*57b5a4a6SAndroid Build Coastguard Worker encodeValuenull14*57b5a4a6SAndroid Build Coastguard Worker override fun encodeValue(value: Any) { 15*57b5a4a6SAndroid Build Coastguard Worker list.add(value) 16*57b5a4a6SAndroid Build Coastguard Worker } 17*57b5a4a6SAndroid Build Coastguard Worker } 18*57b5a4a6SAndroid Build Coastguard Worker encodeToListnull19*57b5a4a6SAndroid Build Coastguard Workerfun <T> encodeToList(serializer: SerializationStrategy<T>, value: T): List<Any> { 20*57b5a4a6SAndroid Build Coastguard Worker val encoder = ListEncoder() 21*57b5a4a6SAndroid Build Coastguard Worker encoder.encodeSerializableValue(serializer, value) 22*57b5a4a6SAndroid Build Coastguard Worker return encoder.list 23*57b5a4a6SAndroid Build Coastguard Worker } 24*57b5a4a6SAndroid Build Coastguard Worker encodeToListnull25*57b5a4a6SAndroid Build Coastguard Workerinline fun <reified T> encodeToList(value: T) = encodeToList(serializer(), value) 26*57b5a4a6SAndroid Build Coastguard Worker 27*57b5a4a6SAndroid Build Coastguard Worker class ListDecoder(val list: ArrayDeque<Any>) : AbstractDecoder() { 28*57b5a4a6SAndroid Build Coastguard Worker private var elementIndex = 0 29*57b5a4a6SAndroid Build Coastguard Worker 30*57b5a4a6SAndroid Build Coastguard Worker override val serializersModule: SerializersModule = EmptySerializersModule() 31*57b5a4a6SAndroid Build Coastguard Worker 32*57b5a4a6SAndroid Build Coastguard Worker override fun decodeValue(): Any = list.removeFirst() 33*57b5a4a6SAndroid Build Coastguard Worker 34*57b5a4a6SAndroid Build Coastguard Worker override fun decodeElementIndex(descriptor: SerialDescriptor): Int { 35*57b5a4a6SAndroid Build Coastguard Worker if (elementIndex == descriptor.elementsCount) return CompositeDecoder.DECODE_DONE 36*57b5a4a6SAndroid Build Coastguard Worker return elementIndex++ 37*57b5a4a6SAndroid Build Coastguard Worker } 38*57b5a4a6SAndroid Build Coastguard Worker 39*57b5a4a6SAndroid Build Coastguard Worker override fun beginStructure(descriptor: SerialDescriptor): CompositeDecoder = 40*57b5a4a6SAndroid Build Coastguard Worker ListDecoder(list) 41*57b5a4a6SAndroid Build Coastguard Worker 42*57b5a4a6SAndroid Build Coastguard Worker override fun decodeSequentially(): Boolean = true 43*57b5a4a6SAndroid Build Coastguard Worker } 44*57b5a4a6SAndroid Build Coastguard Worker decodeFromListnull45*57b5a4a6SAndroid Build Coastguard Workerfun <T> decodeFromList(list: List<Any>, deserializer: DeserializationStrategy<T>): T { 46*57b5a4a6SAndroid Build Coastguard Worker val decoder = ListDecoder(ArrayDeque(list)) 47*57b5a4a6SAndroid Build Coastguard Worker return decoder.decodeSerializableValue(deserializer) 48*57b5a4a6SAndroid Build Coastguard Worker } 49*57b5a4a6SAndroid Build Coastguard Worker decodeFromListnull50*57b5a4a6SAndroid Build Coastguard Workerinline fun <reified T> decodeFromList(list: List<Any>): T = decodeFromList(list, serializer()) 51*57b5a4a6SAndroid Build Coastguard Worker 52*57b5a4a6SAndroid Build Coastguard Worker @Serializable 53*57b5a4a6SAndroid Build Coastguard Worker data class Project(val name: String, val owner: User, val votes: Int) 54*57b5a4a6SAndroid Build Coastguard Worker 55*57b5a4a6SAndroid Build Coastguard Worker @Serializable 56*57b5a4a6SAndroid Build Coastguard Worker data class User(val name: String) 57*57b5a4a6SAndroid Build Coastguard Worker 58*57b5a4a6SAndroid Build Coastguard Worker fun main() { 59*57b5a4a6SAndroid Build Coastguard Worker val data = Project("kotlinx.serialization", User("kotlin"), 9000) 60*57b5a4a6SAndroid Build Coastguard Worker val list = encodeToList(data) 61*57b5a4a6SAndroid Build Coastguard Worker println(list) 62*57b5a4a6SAndroid Build Coastguard Worker val obj = decodeFromList<Project>(list) 63*57b5a4a6SAndroid Build Coastguard Worker println(obj) 64*57b5a4a6SAndroid Build Coastguard Worker } 65