package Ġkotlinx . serialization . context Ċ Ċ import Ġkotlinx . serialization . K Serializer Ċ import Ġkotlin . reflect . K Class Ċ Ċ interface ĠSerial Module Ġ{ ĊĠĠĠ Ġfun Ġregister In ( context : ĠMutable Serial Context ) Ċ } Ċ Ċ class ĠSimple Module < T : ĠAny >( val Ġk Class : ĠK Class < T >, Ġval Ġk Serializer : ĠK Serializer < T >): ĠSerial Module Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġregister In ( context : ĠMutable Serial Context ) Ġ{ ĊĠĠĠĠĠĠĠ Ġcontext . register Serializer ( k Class , Ġk Serializer ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ Suppress (" UN CHECK ED _ CAST ") Ċ class ĠMap Module ( val Ġmap : ĠMap < K Class <* >, ĠK Serializer <* >> ): ĠSerial Module Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġregister In ( context : ĠMutable Serial Context ) Ġ{ ĊĠĠĠĠĠĠĠ Ġmap . forEach Ġ{ Ġ( k , Ġs ) Ġ-> Ġcontext . register Serializer ( k Ġas ĠK Class < Any >, Ġs Ġas ĠK Serializer < Any >) Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ class ĠComposite Module ( modules : ĠList < Serial Module > Ġ= ĠlistOf ()): ĠSerial Module Ġ{ ĊĠĠĠ Ġprivate Ġval Ġmodules : ĠMutable List < Serial Module > Ġ= Ġmodules . to Mutable List () ĊĊĠĠĠ Ġoverride Ġfun Ġregister In ( context : ĠMutable Serial Context ) Ġ{ ĊĠĠĠĠĠĠĠ Ġmodules . forEach Ġ{ Ġit . register In ( context ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoperator Ġfun Ġplus Assign ( module : ĠSerial Module ): ĠUnit Ġ{ Ġmodules Ġ+= Ġmodule Ġ} ĊĠĠĠ Ġfun Ġadd Module ( module : ĠSerial Module ) Ġ= Ġplus Assign ( module ) Ċ } Ċ