package Ġdev . in mo . pl ag ub ot . config Ċ Ċ import Ġcom . github . mat fax . klass index . K lass Index Ċ import Ġdev . in mo . pl ag ub ot . Plugin Ċ import Ġdev . in mo . pl ag ub ot . Plugin Serializer Ċ import Ġdev . in mo . s di . Module Ċ import Ġdev . in mo . s di . Module Serializer Ċ import Ġkotlinx . serialization .* Ċ import Ġkotlinx . serialization . descriptors . Serial Descriptor Ċ import Ġkotlinx . serialization . encoding . Decoder Ċ import Ġkotlinx . serialization . encoding . Encoder Ċ import Ġkotlinx . serialization . json .* Ċ import Ġkotlinx . serialization . modules .* Ċ import Ġkotlin . reflect . K Class Ċ Ċ @ Internal Serialization Api Ċ internal Ġinline Ġfun Ġ< T Ġ: ĠPlugin > ĠK Class < T >. include In ( builder : ĠPol ymorphic Module Builder < Plugin >) Ġ= Ġbuilder . subclass ( this , Ġserializer ()) Ċ Ċ @ Internal Serialization Api Ċ internal Ġval Ġconfig And Plugins Config Json Format : ĠJson ĊĠĠĠ Ġget () Ġ= ĠJson Ġ{ ĊĠĠĠĠĠĠĠ Ġignore Unknown Keys Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġserializers Module Ġ= ĠSerial izers Module Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpol ymorphic ( Plugin :: class ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠK lass Index . getSub classes ( Plugin :: class ). flatMap Ġ{ Ġk class Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġk class . include In ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġk class . annotations . map NotNull Ġ{ Ġit Ġas ? ĠSerial Name Ġ}. map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . value Ġto Ġk class . serializer () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġ+ ĠlistOf NotNull ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġk class . simple Name Ġ? . let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit Ġto Ġk class . serializer () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}. toMap (). let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdefault Ġ{ Ġrequired Type Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit [ required Type ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ internal Ġinterface ĠPlugins Configuration Ġ{ ĊĠĠĠ Ġval Ġplugins : ĠList < Plugin > ĊĠĠĠ Ġval Ġparams : ĠModule ? Ċ } Ċ Ċ @ Serializable Ċ data Ġclass ĠSimple Plugins Configuration ( ĊĠĠĠ Ġoverride Ġval Ġplugins : ĠList < @ Context ual ĠPlugin >, ĊĠĠĠ Ġ@ Context ual ĊĠĠĠ Ġoverride Ġval Ġparams : ĠModule ? Ġ= Ġnull Ċ ) Ġ: ĠPlugins Configuration ĊĊ Ċ internal Ġval ĠDefault Module Serializer Ġ= ĠModule Serializer ( emptyList ()) Ġ{ Ċ Ċ } Ċ Ċ @ Serializer ( Plugin :: class ) Ċ internal Ġclass ĠInternal Plugin Serializer ( ĊĠĠĠ Ġprivate Ġval Ġparams : ĠModule Ċ ) Ġ: ĠK Serializer < Plugin > Ġ{ ĊĠĠĠ Ġoverride Ġval Ġdescriptor : ĠSerial Descriptor Ġ= ĠPlugin Serializer . descriptor ĊĊĠĠĠ Ġ@ Internal Serialization Api ĊĠĠĠ Ġoverride Ġfun Ġdeserialize ( decoder : ĠDecoder ): ĠPlugin Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġas Json Ġ= ĠJson Element . serializer (). deserialize ( decoder ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( as Json Ġis ĠJson Primitive ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparams [ as Json . json Primitive . content ] Ġas ĠPlugin ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġjson Format Ġ= Ġ(( decoder Ġas ? ĠJson Decoder )?. json Ġ?: Ġconfig And Plugins Config Json Format ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġjson Format . decode FromJson Element ( Plugin Serializer , Ġas Json ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Internal Serialization Api ĊĠĠĠ Ġoverride Ġfun Ġserialize ( encoder : ĠEncoder , Ġvalue : ĠPlugin ) Ġ{ ĊĠĠĠĠĠĠĠ Ġparams . keys . first OrNull Ġ{ Ġparams [ it ] Ġ=== Ġvalue Ġ} Ġ? . also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġencoder . encode String ( it ) ĊĠĠĠĠĠĠĠ Ġ} Ġ?: ĠPlugin Serializer . serialize ( encoder , Ġvalue ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ Serializer ( Module :: class ) Ċ internal Ġclass ĠInternal Module Serializer ( ĊĠĠĠ Ġprivate Ġval Ġoriginal : ĠJson Element ?, ĊĠĠĠ Ġprivate Ġval Ġparams : ĠModule Ċ ) Ġ: ĠK Serializer < Module > Ġ{ ĊĠĠĠ Ġoverride Ġval Ġdescriptor : ĠSerial Descriptor Ġ= ĠPlugin Serializer . descriptor ĊĊĠĠĠ Ġ@ Internal Serialization Api ĊĠĠĠ Ġoverride Ġfun Ġdeserialize ( decoder : ĠDecoder ): ĠModule Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġas Json Ġ= ĠJson Element . serializer (). deserialize ( decoder ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( as Json Ġ== Ġoriginal ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparams ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconfig And Plugins Config Json Format . decode FromJson Element ( Default Module Serializer , Ġas Json ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Internal Serialization Api ĊĠĠĠ Ġoverride Ġfun Ġserialize ( encoder : ĠEncoder , Ġvalue : ĠModule ) Ġ= ĠDefault Module Serializer . serialize ( encoder , Ġvalue ) Ċ } Ċ Ċ internal Ġfun Ġinternal Plugin Serializer Serial izers Module ( ĊĠĠĠ Ġinternal Plugin Serializer : ĠInternal Plugin Serializer , ĊĠĠĠ Ġinternal Module Serializer : ĠInternal Module Serializer ? Ċ ) Ġ= ĠSerial izers Module Ġ{ ĊĠĠĠ Ġcontext ual ( internal Plugin Serializer ) ĊĠĠĠ Ġcontext ual ( internal Module Serializer Ġ?: Ġreturn @ Serial izers Module ) Ċ } Ċ Ċ @ Serializer ( Plugins Configuration :: class ) Ċ internal Ġobject ĠPlugins Configuration Serializer Ġ: ĠK Serializer < Plugins Configuration > Ġ{ ĊĠĠĠ Ġprivate Ġval Ġjson Serializer Ġ= ĠJsonObject . serializer () ĊĠĠĠ Ġprivate Ġval Ġmodule Serializer Ġ= ĠModule Serializer () ĊĠĠĠ Ġoverride Ġval Ġdescriptor : ĠSerial Descriptor Ġ= Ġjson Serializer . descriptor ĊĊĠĠĠ Ġ@ Internal Serialization Api ĊĠĠĠ Ġoverride Ġfun Ġdeserialize ( decoder : ĠDecoder ): ĠPlugins Configuration Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġjson Ġ= Ġjson Serializer . deserialize ( decoder ) ĊĠĠĠĠĠĠĠ Ġval Ġjson Format Ġ= Ġ( decoder Ġas ? ĠJson Decoder ) Ġ? . json Ġ?: Ġconfig And Plugins Config Json Format ĊĠĠĠĠĠĠĠ Ġval Ġparams Row Ġ= Ġjson [" params "] ĊĊĠĠĠĠĠĠĠ Ġval Ġresult Json Format Ġ= Ġif Ġ( params Row Ġ!= Ġnull Ġ&& Ġparams Row Ġ!= ĠJson Null ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġparams Ġ= Ġjson Format . decode FromJson Element ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodule Serializer , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparams Row ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġplugins Serializer Ġ= ĠInternal Plugin Serializer ( params ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmodule Serializer Ġ= ĠInternal Module Serializer ( params Row , Ġparams ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠJson ( json Format ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġserializers Module Ġ= Ġdecoder . serializers Module . overwrite With ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinternal Plugin Serializer Serial izers Module ( plugins Serializer , Ġmodule Serializer ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġjson Format ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult Json Format . decode FromJson Element ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠConfig . serializer (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġjson ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠSerialization Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult Json Format . decode FromJson Element ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSimple Plugins Configuration . serializer (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġjson ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Internal Serialization Api ĊĠĠĠ Ġoverride Ġfun Ġserialize ( encoder : ĠEncoder , Ġvalue : ĠPlugins Configuration ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġparams Ġ= Ġvalue . params ĊĠĠĠĠĠĠĠ Ġval Ġserializer Ġ= Ġwhen Ġ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠConfig Ġ-> ĠConfig . serializer () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠSimple Plugins Configuration Ġ-> ĠSimple Plugins Configuration . serializer () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( params Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġplugins Serializer Ġ= ĠInternal Plugin Serializer ( params ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġjson Format Ġ= ĠJson ( config And Plugins Config Json Format ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġserializers Module Ġ= Ġencoder . serializers Module . overwrite With ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinternal Plugin Serializer Serial izers Module ( plugins Serializer , Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġjson Serializer . serialize ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġencoder , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠConfig Ġ-> Ġjson Format . encode ToJson Element ( Config . serializer (), Ġvalue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠSimple Plugins Configuration Ġ-> Ġjson Format . encode ToJson Element ( Simple Plugins Configuration . serializer (), Ġvalue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġas ĠJsonObject ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠConfig Ġ-> ĠConfig . serializer (). serialize ( encoder , Ġvalue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠSimple Plugins Configuration Ġ-> ĠSimple Plugins Configuration . serializer (). serialize ( encoder , Ġvalue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ