1*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.examplePoly17 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.modules.* 8*57b5a4a6SAndroid Build Coastguard Worker 9*57b5a4a6SAndroid Build Coastguard Worker @Serializable 10*57b5a4a6SAndroid Build Coastguard Worker abstract class Response<out T> 11*57b5a4a6SAndroid Build Coastguard Worker 12*57b5a4a6SAndroid Build Coastguard Worker @Serializable 13*57b5a4a6SAndroid Build Coastguard Worker @SerialName("OkResponse") 14*57b5a4a6SAndroid Build Coastguard Worker data class OkResponse<out T>(val data: T) : Response<T>() 15*57b5a4a6SAndroid Build Coastguard Worker <lambda>null16*57b5a4a6SAndroid Build Coastguard Workerval responseModule = SerializersModule { 17*57b5a4a6SAndroid Build Coastguard Worker polymorphic(Response::class) { 18*57b5a4a6SAndroid Build Coastguard Worker subclass(OkResponse.serializer(PolymorphicSerializer(Any::class))) 19*57b5a4a6SAndroid Build Coastguard Worker } 20*57b5a4a6SAndroid Build Coastguard Worker } 21*57b5a4a6SAndroid Build Coastguard Worker <lambda>null22*57b5a4a6SAndroid Build Coastguard Workerval projectModule = SerializersModule { 23*57b5a4a6SAndroid Build Coastguard Worker fun PolymorphicModuleBuilder<Project>.registerProjectSubclasses() { 24*57b5a4a6SAndroid Build Coastguard Worker subclass(OwnedProject::class) 25*57b5a4a6SAndroid Build Coastguard Worker } 26*57b5a4a6SAndroid Build Coastguard Worker polymorphic(Any::class) { registerProjectSubclasses() } 27*57b5a4a6SAndroid Build Coastguard Worker polymorphic(Project::class) { registerProjectSubclasses() } 28*57b5a4a6SAndroid Build Coastguard Worker } 29*57b5a4a6SAndroid Build Coastguard Worker 30*57b5a4a6SAndroid Build Coastguard Worker @Serializable 31*57b5a4a6SAndroid Build Coastguard Worker abstract class Project { 32*57b5a4a6SAndroid Build Coastguard Worker abstract val name: String 33*57b5a4a6SAndroid Build Coastguard Worker } 34*57b5a4a6SAndroid Build Coastguard Worker 35*57b5a4a6SAndroid Build Coastguard Worker @Serializable 36*57b5a4a6SAndroid Build Coastguard Worker @SerialName("OwnedProject") 37*57b5a4a6SAndroid Build Coastguard Worker data class OwnedProject(override val name: String, val owner: String) : Project() 38*57b5a4a6SAndroid Build Coastguard Worker <lambda>null39*57b5a4a6SAndroid Build Coastguard Workerval format = Json { serializersModule = projectModule + responseModule } 40*57b5a4a6SAndroid Build Coastguard Worker mainnull41*57b5a4a6SAndroid Build Coastguard Workerfun main() { 42*57b5a4a6SAndroid Build Coastguard Worker // both Response and Project are abstract and their concrete subtypes are being serialized 43*57b5a4a6SAndroid Build Coastguard Worker val data: Response<Project> = OkResponse(OwnedProject("kotlinx.serialization", "kotlin")) 44*57b5a4a6SAndroid Build Coastguard Worker val string = format.encodeToString(data) 45*57b5a4a6SAndroid Build Coastguard Worker println(string) 46*57b5a4a6SAndroid Build Coastguard Worker println(format.decodeFromString<Response<Project>>(string)) 47*57b5a4a6SAndroid Build Coastguard Worker } 48*57b5a4a6SAndroid Build Coastguard Worker 49