/* Ċ Ġ* ĠCopyright Ġ 2 0 1 7 - 2 0 1 9 ĠJetBrains Ġs . r . o . ĠUse Ġof Ġthis Ġsource Ġcode Ġis Ġgoverned Ġby Ġthe ĠApache Ġ 2 . 0 Ġlicense . Ċ Ġ*/ Ċ Ċ package Ġkotlinx . serialization . internal Ċ Ċ import Ġkotlinx . serialization .* Ċ Ċ /** Ċ Ġ* ĠSerializer Ġfor ĠKotlin 's Ġsing letons Ġ( den oted Ġby Ġ` object ` Ġkeyword ). Ċ Ġ* ĠTo Ġpreserve Ġsingleton Ġidentity Ġafter Ġserialization Ġand Ġde serialization , Ġobject Ġserializer Ċ Ġ* Ġuses Ġan Ġ[ object Ġinstance ][ object Instance ]. Ċ Ġ* ĠBy Ġdefault , Ġa Ġsingleton Ġis Ġserialized Ġas Ġan Ġempty Ġstructure , Ġe . g . Ġ` {} ` Ġin ĠJSON Ċ Ġ*/ Ċ @ Internal Serialization Api Ċ public Ġclass ĠObject Serializer < T Ġ: ĠAny >( serial Name : ĠString , Ġprivate Ġval Ġobject Instance : ĠT ) Ġ: ĠK Serializer < T > Ġ{ ĊĠĠĠ Ġoverride Ġval Ġdescriptor : ĠSerial Descriptor Ġ= ĠObject Descriptor ( serial Name ) ĊĊĠĠĠ Ġoverride Ġfun Ġserialize ( encoder : ĠEncoder , Ġobj : ĠT ) Ġ{ ĊĠĠĠĠĠĠĠ Ġencoder . begin Structure ( descriptor ). end Structure ( descriptor ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdeserialize ( decoder : ĠDecoder ): ĠT Ġ{ ĊĠĠĠĠĠĠĠ Ġdecoder . begin Structure ( descriptor ). end Structure ( descriptor ) ĊĠĠĠĠĠĠĠ Ġreturn Ġobject Instance ĊĠĠĠ Ġ} Ċ } Ċ Ċ internal Ġclass ĠObject Descriptor ( name : ĠString ) Ġ: ĠSerial Class Desc Impl ( name ) Ġ{ ĊĠĠĠ Ġoverride Ġval Ġkind : ĠSerial Kind Ġ= ĠUnion Kind . OBJECT ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġadd Element ( name ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Element Descriptor ( index : ĠInt ): ĠSerial Descriptor Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġequals ( other : ĠAny ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( this Ġ=== Ġother ) Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġif Ġ( other Ġ! is ĠSerial Descriptor ) Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġif Ġ( other . kind Ġ!== ĠUnion Kind . OBJECT ) Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġif Ġ( name Ġ!= Ġother . name ) Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠhashCode (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġname . hashCode () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠtoString (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ"$ name ()" ĊĠĠĠ Ġ} Ċ } Ċ