package Ġcom . sales force . k 2 v 8 . internal Ċ Ċ import Ġcom . ec lip ses ource . v 8 . V 8 Object Ċ import Ġcom . ec lip ses ource . v 8 . V 8 Value Ċ import Ġcom . sales force . k 2 v 8 . V 8 De coding Exception Ċ import Ġcom . sales force . k 2 v 8 . V 8 Object Decoder Ċ import Ġcom . sales force . k 2 v 8 . V 8 Object Encoder Ċ import Ġkotlinx . serialization . Deserialization Strategy Ċ import Ġkotlinx . serialization . Se aled Class Serializer Ċ import Ġkotlinx . serialization . Serialization Strategy Ċ import Ġkotlinx . serialization . descriptors . Pol ymorphic Kind Ċ import Ġkotlinx . serialization . descriptors . Primitive Kind Ċ import Ġkotlinx . serialization . descriptors . Serial Kind Ċ import Ġkotlinx . serialization . find Pol ymorphic Serializer Ċ import Ġkotlinx . serialization . internal . Abstract Pol ymorphic Serializer Ċ Ċ /** Ċ Ġ* ĠAdapt ed Ġfrom Ġ[ kotlin x . serialization . json . internal . encode Pol ym orph ically ] Ċ Ġ*/ Ċ @ Suppress (" UN CHECK ED _ CAST ") Ċ internal Ġinline Ġfun Ġ< T > ĠV 8 Object Encoder . encode Pol ym orph ically ( serializer : ĠSerialization Strategy < T >, Ġvalue : ĠT , Ġif Pol ymorphic : Ġ() Ġ-> ĠUnit ) Ġ{ ĊĠĠĠ Ġif Ġ( serializer Ġ! is ĠAbstract Pol ymorphic Serializer <* >) Ġ{ ĊĠĠĠĠĠĠĠ Ġserializer . serialize ( this , Ġvalue ) ĊĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠ Ġ} ĊĠĠĠ Ġval Ġactual Serializer Ġ= Ġfind Actual Serializer ( serializer Ġas ĠSerialization Strategy < Any >, Ġvalue Ġas ĠAny ) ĊĠĠĠ Ġif Pol ymorphic () ĊĠĠĠ Ġactual Serializer . serialize ( this , Ġvalue ) Ċ } Ċ Ċ /** Ċ Ġ* ĠAdapt ed Ġfrom Ġ[ kotlin x . serialization . json . internal . find Actual Serializer ] Ċ Ġ*/ Ċ private Ġfun ĠV 8 Object Encoder . find Actual Serializer ( ĊĠĠĠ Ġserializer : ĠSerialization Strategy < Any >, ĊĠĠĠ Ġvalue : ĠAny Ċ ): ĠSerialization Strategy < Any > Ġ{ ĊĠĠĠ Ġval Ġcast ed Ġ= Ġserializer Ġas ĠAbstract Pol ymorphic Serializer < Any > ĊĠĠĠ Ġval Ġactual Serializer Ġ= Ġcast ed . find Pol ymorphic Serializer ( this , Ġvalue ) ĊĠĠĠ Ġvalidate If Se aled ( cast ed , Ġactual Serializer , Ġk 2 V 8 . configuration . class Discriminator ) ĊĠĠĠ Ġval Ġkind Ġ= Ġactual Serializer . descriptor . kind ĊĠĠĠ Ġcheck Kind ( kind ) ĊĠĠĠ Ġreturn Ġactual Serializer Ċ } Ċ Ċ /** Ċ Ġ* ĠAdapt ed Ġfrom Ġ[ kotlin x . serialization . json . internal . validate If Se aled ] Ċ Ġ*/ Ċ private Ġfun Ġvalidate If Se aled ( ĊĠĠĠ Ġserializer : ĠSerialization Strategy <* >, ĊĠĠĠ Ġactual Serializer : ĠSerialization Strategy < Any >, ĊĠĠĠ Ġclass Discriminator : ĠString Ċ ) Ġ{ ĊĠĠĠ Ġif Ġ( serializer Ġ! is ĠSe aled Class Serializer <* >) Ġreturn ĊĠĠĠ Ġif Ġ( class Discriminator Ġin Ġactual Serializer . descriptor . cached Serial Names ()) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbase Name Ġ= Ġserializer . descriptor . serial Name ĊĠĠĠĠĠĠĠ Ġval Ġactual Name Ġ= Ġactual Serializer . descriptor . serial Name ĊĠĠĠĠĠĠĠ Ġerror ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Se aled Ġclass Ġ'$ actual Name ' Ġcannot Ġbe Ġserialized Ġas Ġbase Ġclass Ġ'$ base Name ' Ġbecause " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Ġit Ġhas Ġproperty Ġname Ġthat Ġconflicts Ġwith ĠK 2 V 8 Ġclass Ġdiscriminator Ġ'$ class Discriminator '. Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" You Ġwill Ġneed Ġto Ġchange Ġthe Ġclass Ġdiscriminator Ġin ĠK 2 V 8 ĠConfiguration ." ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠAdapt ed Ġfrom Ġ[ kotlin x . serialization . json . internal . check Kind ] Ċ Ġ*/ Ċ internal Ġfun Ġcheck Kind ( kind : ĠSerial Kind ) Ġ{ ĊĠĠĠ Ġif Ġ( kind Ġis ĠSerial Kind . ENUM ) Ġerror (" Enums Ġcannot Ġbe Ġserialized Ġpol ym orph ically Ġwith Ġ' type ' Ġparameter .") ĊĠĠĠ Ġif Ġ( kind Ġis ĠPrimitive Kind ) Ġerror (" Primitives Ġcannot Ġbe Ġserialized Ġpol ym orph ically Ġwith Ġ' type ' Ġparameter .") ĊĠĠĠ Ġif Ġ( kind Ġis ĠPol ymorphic Kind ) Ġerror (" Actual Ġserializer Ġfor Ġpol ymorphic Ġcannot Ġbe Ġpol ymorphic Ġitself ") Ċ } Ċ Ċ /** Ċ Ġ* ĠAdapt ed Ġfrom Ġ[ kotlin x . serialization . json . internal . decode Serializable Value Pol ymorphic ] Ċ Ġ*/ Ċ internal Ġfun Ġ< T > ĠV 8 Object Decoder . decode Serializable Value Pol ymorphic ( de serializer : ĠDeserial ization Strategy < T >): ĠT Ġ{ ĊĊĠĠĠ Ġ// Ġif Ġthis Ġisn 't Ġa Ġpol ymorphic Ġserializer Ġallow Ġit Ġto Ġdo Ġit 's Ġown Ġde serialization ĊĠĠĠ Ġif Ġ( de serializer Ġ! is ĠAbstract Pol ymorphic Serializer <* >) Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġde serializer . deserialize ( this ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Ġget Ġcurrent Ġobject Ġand Ġcopy Ġit , Ġremoving Ġthe Ġtype Ġinformation ĊĠĠĠ Ġreturn Ġcurrent Object (). use Ġ{ Ġoriginal Ġ-> ĊĠĠĠĠĠĠĠ Ġval Ġtype Ġ= Ġoriginal . getString ( k 2 V 8 . configuration . class Discriminator ) ĊĠĠĠĠĠĠĠ Ġval Ġcopied Ġ= ĠV 8 Object ( k 2 V 8 . configuration . runtime ). apply Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġfilter Ġout Ġtype Ġkey ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoriginal . keys . filter Ġ{ Ġit Ġ!= Ġk 2 V 8 . configuration . class Discriminator Ġ}. forEach Ġ{ Ġkey Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( original . getType ( key )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠV 8 Value . UNDEFINED Ġ-> Ġadd Undefined ( key ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠV 8 Value . NULL Ġ-> Ġadd Null ( key ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠV 8 Value . INTEGER Ġ-> Ġadd ( key , Ġoriginal . getInteger ( key )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠV 8 Value . DOUBLE Ġ-> Ġadd ( key , Ġoriginal . getDouble ( key )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠV 8 Value . BOOLEAN Ġ-> Ġadd ( key , Ġoriginal . getBoolean ( key )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠV 8 Value . STRING Ġ-> Ġadd ( key , Ġoriginal . getString ( key )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠV 8 Value . V 8 _ ARRAY Ġ-> Ġadd ( key , Ġoriginal . get Array ( key )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠV 8 Value . V 8 _ OBJECT Ġ-> Ġadd ( key , Ġoriginal . getObject ( key )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġfind Ġthe Ġactual Ġserializer Ġfor Ġthe Ġtype ĊĠĠĠĠĠĠĠ Ġval Ġactual Serializer Ġ= Ġde serializer . find Pol ymorphic Serializer OrNull ( this , Ġtype ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġthrow Serializer NotFound ( type , Ġoriginal ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġreturn Ġdeserialized Ġobject ĊĠĠĠĠĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠĠĠĠĠ Ġk 2 V 8 . from V 8 ( actual Serializer Ġas ĠDeserial ization Strategy < T >, Ġcopied ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ private Ġfun Ġthrow Serializer NotFound ( type : ĠString ?, Ġv 8 Object : ĠV 8 Object ): ĠNothing Ġ{ ĊĠĠĠ Ġval Ġsuffix Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( type Ġ== Ġnull ) Ġ" missing Ġclass Ġdiscriminator Ġ(' null ')" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ" class Ġdiscriminator Ġ'$ type '" ĊĠĠĠ Ġthrow ĠV 8 De coding Exception (" Pol ymorphic Ġserializer Ġwas Ġnot Ġfound Ġfor Ġ$ suffix , ĠV 8 Object : Ġ$ v 8 Object ") Ċ } Ċ