<lambda>null1*57b5a4a6SAndroid Build Coastguard Worker// This file was automatically generated from polymorphism.md by Knit tool. Do not edit. 2*57b5a4a6SAndroid Build Coastguard Worker package example.examplePoly20 3*57b5a4a6SAndroid Build Coastguard Worker 4*57b5a4a6SAndroid Build Coastguard Worker import kotlinx.serialization.* 5*57b5a4a6SAndroid Build Coastguard Worker import kotlinx.serialization.json.* 6*57b5a4a6SAndroid Build Coastguard Worker 7*57b5a4a6SAndroid Build Coastguard Worker import kotlinx.serialization.descriptors.* 8*57b5a4a6SAndroid Build Coastguard Worker import kotlinx.serialization.encoding.* 9*57b5a4a6SAndroid Build Coastguard Worker import kotlinx.serialization.modules.* 10*57b5a4a6SAndroid Build Coastguard Worker 11*57b5a4a6SAndroid Build Coastguard Worker interface Animal { 12*57b5a4a6SAndroid Build Coastguard Worker } 13*57b5a4a6SAndroid Build Coastguard Worker 14*57b5a4a6SAndroid Build Coastguard Worker interface Cat : Animal { 15*57b5a4a6SAndroid Build Coastguard Worker val catType: String 16*57b5a4a6SAndroid Build Coastguard Worker } 17*57b5a4a6SAndroid Build Coastguard Worker 18*57b5a4a6SAndroid Build Coastguard Worker interface Dog : Animal { 19*57b5a4a6SAndroid Build Coastguard Worker val dogType: String 20*57b5a4a6SAndroid Build Coastguard Worker } 21*57b5a4a6SAndroid Build Coastguard Worker 22*57b5a4a6SAndroid Build Coastguard Worker private class CatImpl : Cat { 23*57b5a4a6SAndroid Build Coastguard Worker override val catType: String = "Tabby" 24*57b5a4a6SAndroid Build Coastguard Worker } 25*57b5a4a6SAndroid Build Coastguard Worker 26*57b5a4a6SAndroid Build Coastguard Worker private class DogImpl : Dog { 27*57b5a4a6SAndroid Build Coastguard Worker override val dogType: String = "Husky" 28*57b5a4a6SAndroid Build Coastguard Worker } 29*57b5a4a6SAndroid Build Coastguard Worker 30*57b5a4a6SAndroid Build Coastguard Worker object AnimalProvider { createCatnull31*57b5a4a6SAndroid Build Coastguard Worker fun createCat(): Cat = CatImpl() 32*57b5a4a6SAndroid Build Coastguard Worker fun createDog(): Dog = DogImpl() 33*57b5a4a6SAndroid Build Coastguard Worker } 34*57b5a4a6SAndroid Build Coastguard Worker 35*57b5a4a6SAndroid Build Coastguard Worker val module = SerializersModule { 36*57b5a4a6SAndroid Build Coastguard Worker polymorphicDefaultSerializer(Animal::class) { instance -> 37*57b5a4a6SAndroid Build Coastguard Worker @Suppress("UNCHECKED_CAST") 38*57b5a4a6SAndroid Build Coastguard Worker when (instance) { 39*57b5a4a6SAndroid Build Coastguard Worker is Cat -> CatSerializer as SerializationStrategy<Animal> 40*57b5a4a6SAndroid Build Coastguard Worker is Dog -> DogSerializer as SerializationStrategy<Animal> 41*57b5a4a6SAndroid Build Coastguard Worker else -> null 42*57b5a4a6SAndroid Build Coastguard Worker } 43*57b5a4a6SAndroid Build Coastguard Worker } 44*57b5a4a6SAndroid Build Coastguard Worker } 45*57b5a4a6SAndroid Build Coastguard Worker 46*57b5a4a6SAndroid Build Coastguard Worker object CatSerializer : SerializationStrategy<Cat> { <lambda>null47*57b5a4a6SAndroid Build Coastguard Worker override val descriptor = buildClassSerialDescriptor("Cat") { 48*57b5a4a6SAndroid Build Coastguard Worker element<String>("catType") 49*57b5a4a6SAndroid Build Coastguard Worker } 50*57b5a4a6SAndroid Build Coastguard Worker serializenull51*57b5a4a6SAndroid Build Coastguard Worker override fun serialize(encoder: Encoder, value: Cat) { 52*57b5a4a6SAndroid Build Coastguard Worker encoder.encodeStructure(descriptor) { 53*57b5a4a6SAndroid Build Coastguard Worker encodeStringElement(descriptor, 0, value.catType) 54*57b5a4a6SAndroid Build Coastguard Worker } 55*57b5a4a6SAndroid Build Coastguard Worker } 56*57b5a4a6SAndroid Build Coastguard Worker } 57*57b5a4a6SAndroid Build Coastguard Worker 58*57b5a4a6SAndroid Build Coastguard Worker object DogSerializer : SerializationStrategy<Dog> { <lambda>null59*57b5a4a6SAndroid Build Coastguard Worker override val descriptor = buildClassSerialDescriptor("Dog") { 60*57b5a4a6SAndroid Build Coastguard Worker element<String>("dogType") 61*57b5a4a6SAndroid Build Coastguard Worker } 62*57b5a4a6SAndroid Build Coastguard Worker serializenull63*57b5a4a6SAndroid Build Coastguard Worker override fun serialize(encoder: Encoder, value: Dog) { 64*57b5a4a6SAndroid Build Coastguard Worker encoder.encodeStructure(descriptor) { 65*57b5a4a6SAndroid Build Coastguard Worker encodeStringElement(descriptor, 0, value.dogType) 66*57b5a4a6SAndroid Build Coastguard Worker } 67*57b5a4a6SAndroid Build Coastguard Worker } 68*57b5a4a6SAndroid Build Coastguard Worker } 69*57b5a4a6SAndroid Build Coastguard Worker <lambda>null70*57b5a4a6SAndroid Build Coastguard Workerval format = Json { serializersModule = module } 71*57b5a4a6SAndroid Build Coastguard Worker mainnull72*57b5a4a6SAndroid Build Coastguard Workerfun main() { 73*57b5a4a6SAndroid Build Coastguard Worker println(format.encodeToString<Animal>(AnimalProvider.createCat())) 74*57b5a4a6SAndroid Build Coastguard Worker } 75