package Ġorg . lit ote . km ongo . serialization Ċ Ċ import Ġkotlinx . serialization . Composite Decoder Ċ import Ġkotlinx . serialization . Composite Encoder Ċ import Ġkotlinx . serialization . Context ual Serialization Ċ import Ġkotlinx . serialization . Decoder Ċ import Ġkotlinx . serialization . Encoder Ċ import Ġkotlinx . serialization . Implicit Reflection Serializer Ċ import Ġkotlinx . serialization . K Serializer Ċ import Ġkotlinx . serialization . Serializable Ċ import Ġkotlinx . serialization . Serializer Ċ import Ġkotlinx . serialization . internal . Serial Class Desc Impl Ċ import Ġkotlinx . serialization . internal . String Descriptor Ċ import Ġkotlinx . serialization . modules . Serial izers Module Ċ import Ġorg . bson . B son Document Ċ import Ġorg . bson . B son Document Reader Ċ import Ġorg . bson . B son Document Writer Ċ import Ġorg . bson . code cs . Decoder Context Ċ import Ġorg . bson . code cs . Encoder Context Ċ import Ġorg . bson . types . ObjectId Ċ import Ġorg . junit . Test Ċ import Ġorg . lit ote . km ongo . Id Ċ import Ġorg . lit ote . km ongo . model . Friend Ċ import Ġorg . lit ote . km ongo . new Id Ċ import Ġkotlin . test . assertEquals Ċ import Ġkotlin . test . assert Fails Ċ import Ġkotlin . test . assertFalse Ċ Ċ /** Ċ Ġ* Ċ Ġ*/ Ċ class ĠSerialization Codec Test Ġ{ ĊĊĠĠĠ Ġ@ Implicit Reflection Serializer ĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` encode Ġand Ġdecode ĠFriend `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfriend Ġ= ĠFriend (" Jo e ", Ġ" 2 2 ĠWall ĠStreet ĠA venue ", Ġ_ id Ġ= ĠObjectId ()) ĊĠĠĠĠĠĠĠ Ġval Ġcodec Ġ= ĠSerialization Codec ( Friend :: class , Ġconfiguration ) ĊĠĠĠĠĠĠĠ Ġval Ġdocument Ġ= ĠB son Document () ĊĠĠĠĠĠĠĠ Ġval Ġwriter Ġ= ĠB son Document Writer ( document ) ĊĠĠĠĠĠĠĠ Ġcodec . encode ( writer , Ġfriend , ĠEncoder Context . builder (). build ()) ĊĊĠĠĠĠĠĠĠ Ġval Ġnew Friend Ġ= Ġcodec . decode ( B son Document Reader ( document ), ĠDecoder Context . builder (). build ()) ĊĊĠĠĠĠĠĠĠ ĠassertEquals ( friend , Ġnew Friend ) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ@ Serializable ĊĠĠĠ Ġdata Ġclass ĠTest With Id (@ Context ual Serialization Ġval Ġid : ĠId < Test With Id > Ġ= Ġnew Id ()) ĊĊĠĠĠ Ġ@ Implicit Reflection Serializer ĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` encode Ġand Ġdecode ĠI ds `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġid Ġ= ĠTest With Id () ĊĠĠĠĠĠĠĠ Ġval Ġcodec Ġ= ĠSerialization Codec ( Test With Id :: class , Ġconfiguration ) ĊĠĠĠĠĠĠĠ Ġval Ġdocument Ġ= ĠB son Document () ĊĠĠĠĠĠĠĠ Ġval Ġwriter Ġ= ĠB son Document Writer ( document ) ĊĠĠĠĠĠĠĠ Ġcodec . encode ( writer , Ġid , ĠEncoder Context . builder (). build ()) ĊĊĠĠĠĠĠĠĠ Ġval Ġnew Friend Ġ= Ġcodec . decode ( B son Document Reader ( document ), ĠDecoder Context . builder (). build ()) ĊĊĠĠĠĠĠĠĠ ĠassertEquals ( id , Ġnew Friend ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Serializable ĊĠĠĠ Ġdata Ġclass ĠTest With Set Of Ids ( val Ġlist : ĠSet < @ Context ual Serialization ĠId < Test With Id >> Ġ= Ġset Of ( new Id ())) ĊĊĠĠĠ Ġ@ Implicit Reflection Serializer ĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` encode Ġand Ġdecode Ġlist Ġof Ġids `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġid List Ġ= ĠTest With Set Of Ids () ĊĠĠĠĠĠĠĠ Ġval Ġcodec Ġ= ĠSerialization Codec ( Test With Set Of Ids :: class , Ġconfiguration ) ĊĠĠĠĠĠĠĠ Ġval Ġdocument Ġ= ĠB son Document () ĊĠĠĠĠĠĠĠ Ġval Ġwriter Ġ= ĠB son Document Writer ( document ) ĊĠĠĠĠĠĠĠ Ġcodec . encode ( writer , Ġid List , ĠEncoder Context . builder (). build ()) ĊĊĠĠĠĠĠĠĠ Ġval Ġnew Friend Ġ= Ġcodec . decode ( B son Document Reader ( document ), ĠDecoder Context . builder (). build ()) ĊĊĠĠĠĠĠĠĠ ĠassertEquals ( id List , Ġnew Friend ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Serializable ĊĠĠĠ Ġdata Ġclass ĠTest With Map Of Ids ( ĊĠĠĠĠĠĠĠ Ġval Ġmap : ĠMap < @ Context ual Serialization ĠId < Test With Id >, ĠString > ĊĠĠĠĠĠĠĠ Ġ= Ġmap Of ( new Id < Test With Id >() Ġto Ġ" a ") ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġ@ Implicit Reflection Serializer ĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` encode Ġand Ġdecode Ġmap Ġof Ġids `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġid List Ġ= ĠTest With Map Of Ids () ĊĠĠĠĠĠĠĠ Ġval Ġcodec Ġ= ĠSerialization Codec ( Test With Map Of Ids :: class , Ġconfiguration ) ĊĠĠĠĠĠĠĠ Ġval Ġdocument Ġ= ĠB son Document () ĊĠĠĠĠĠĠĠ Ġval Ġwriter Ġ= ĠB son Document Writer ( document ) ĊĠĠĠĠĠĠĠ Ġcodec . encode ( writer , Ġid List , ĠEncoder Context . builder (). build ()) ĊĊĠĠĠĠĠĠĠ Ġval Ġnew Friend Ġ= Ġcodec . decode ( B son Document Reader ( document ), ĠDecoder Context . builder (). build ()) ĊĊĠĠĠĠĠĠĠ ĠassertEquals ( id List , Ġnew Friend ) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġdata Ġclass ĠCustom ( val Ġs : ĠString , Ġval Ġb : ĠBoolean Ġ= Ġfalse ) ĊĊĠĠĠ Ġ@ Serializer ( for Class Ġ= ĠCustom :: class ) ĊĠĠĠ Ġobject ĠCustom Serializer Ġ: ĠK Serializer < Custom > Ġ{ ĊĊĠĠĠĠĠĠĠ Ġobject ĠCustom Class Desc Ġ: ĠSerial Class Desc Impl (" Custom ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Element (" s ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpush Descriptor ( String Descriptor ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġdeserialize ( decoder : ĠDecoder ): ĠCustom Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdecoder Ġas ĠComposite Decoder ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdecoder . begin Structure ( Custom Class Desc ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġc Ġ= ĠCustom ( decoder . decode String Element ( Custom Class Desc , Ġ 0 )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdecoder . end Structure ( Custom Class Desc ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġc ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġserialize ( encoder : ĠEncoder , Ġobj : ĠCustom ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġencoder Ġas ĠComposite Encoder ĊĠĠĠĠĠĠĠĠĠĠĠ Ġencoder . begin Structure ( Custom Class Desc ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġencoder . encode String Element ( Custom Class Desc , Ġ 0 , Ġobj . s ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġencoder . end Structure ( Custom Class Desc ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Implicit Reflection Serializer ĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` encode Ġand Ġdecode Ġwith Ġcustom Ġserializer `() Ġ{ ĊĠĠĠĠĠĠĠ Ġregister Serializer ( Custom Serializer ) ĊĠĠĠĠĠĠĠ Ġval Ġc Ġ= ĠCustom (" a ", Ġtrue ) ĊĠĠĠĠĠĠĠ Ġval Ġcodec Ġ= ĠSerialization Codec ( Custom :: class , Ġconfiguration ) ĊĠĠĠĠĠĠĠ Ġval Ġdocument Ġ= ĠB son Document () ĊĠĠĠĠĠĠĠ Ġval Ġwriter Ġ= ĠB son Document Writer ( document ) ĊĠĠĠĠĠĠĠ Ġcodec . encode ( writer , Ġc , ĠEncoder Context . builder (). build ()) ĊĊĠĠĠĠĠĠĠ Ġval Ġnew C Ġ= Ġcodec . decode ( B son Document Reader ( document ), ĠDecoder Context . builder (). build ()) ĊĊĠĠĠĠĠĠĠ ĠassertEquals ( c . s , Ġnew C . s ) ĊĠĠĠĠĠĠĠ ĠassertFalse ( new C . b ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinterface ĠMessage ĊĊĠĠĠ Ġ@ Serializable ĊĠĠĠ Ġdata Ġclass ĠString Message ( val Ġmessage : ĠString ) Ġ: ĠMessage ĊĊĠĠĠ Ġ@ Serializable ĊĠĠĠ Ġdata Ġclass ĠInt Message ( val Ġnumber : ĠInt ) Ġ: ĠMessage ĊĊĠĠĠ Ġ@ Serializable ĊĠĠĠ Ġdata Ġclass ĠContainer ( val Ġm : ĠMessage ) ĊĊĠĠĠ Ġ@ Implicit Reflection Serializer ĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` encode Ġand Ġdecode Ġwith Ġcustom Ġpol ymorphic Ġserializer `() Ġ{ ĊĠĠĠĠĠĠĠ Ġregister Module ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSerial izers Module Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpol ymorphic ( Message :: class ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠString Message :: class Ġwith ĠString Message . serializer () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠInt Message :: class Ġwith ĠInt Message . serializer () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġval Ġc Ġ= ĠContainer ( String Message (" a ")) ĊĠĠĠĠĠĠĠ Ġval Ġcodec Ġ= ĠSerialization Codec ( Container :: class , Ġconfiguration ) ĊĠĠĠĠĠĠĠ Ġval Ġdocument Ġ= ĠB son Document () ĊĠĠĠĠĠĠĠ Ġval Ġwriter Ġ= ĠB son Document Writer ( document ) ĊĠĠĠĠĠĠĠ Ġcodec . encode ( writer , Ġc , ĠEncoder Context . builder (). build ()) ĊĊĠĠĠĠĠĠĠ Ġval Ġnew C Ġ= Ġcodec . decode ( B son Document Reader ( document ), ĠDecoder Context . builder (). build ()) ĊĊĠĠĠĠĠĠĠ ĠassertEquals ( c , Ġnew C ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinterface ĠMessage 2 ĊĊĠĠĠ Ġ@ Serializable ĊĠĠĠ Ġdata Ġclass ĠString Message 2 ( val Ġmessage : ĠString ) Ġ: ĠMessage 2 ĊĊĠĠĠ Ġ@ Serializable ĊĠĠĠ Ġdata Ġclass ĠInt Message 2 ( val Ġnumber : ĠInt ) Ġ: ĠMessage 2 ĊĊĠĠĠ Ġ@ Implicit Reflection Serializer ĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` encode Ġand Ġdecode Ġdirectly Ġcustom Ġpol ymorphic Ġserializer `() Ġ{ ĊĠĠĠĠĠĠĠ Ġregister Module ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSerial izers Module Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpol ymorphic ( Message 2 :: class ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠString Message 2 :: class Ġwith ĠString Message 2 . serializer () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠInt Message 2 :: class Ġwith ĠInt Message 2 . serializer () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġval Ġc Ġ= ĠString Message 2 (" a ") ĊĠĠĠĠĠĠĠ Ġval Ġcodec Ġ= ĠSerialization Codec ( Message 2 :: class , Ġconfiguration ) ĊĠĠĠĠĠĠĠ Ġval Ġdocument Ġ= ĠB son Document () ĊĠĠĠĠĠĠĠ Ġval Ġwriter Ġ= ĠB son Document Writer ( document ) ĊĠĠĠĠĠĠĠ Ġcodec . encode ( writer , Ġc , ĠEncoder Context . builder (). build ()) ĊĊĠĠĠĠĠĠĠ Ġval Ġnew C Ġ= Ġcodec . decode ( B son Document Reader ( document ), ĠDecoder Context . builder (). build ()) ĊĊĠĠĠĠĠĠĠ ĠassertEquals ( c , Ġnew C ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Serializable ĊĠĠĠ Ġdata Ġclass ĠSerializable Class ( val Ġs : ĠString ) ĊĊĠĠĠ Ġdata Ġclass ĠNot Serializable Class ( val Ġs : ĠString ) ĊĊĠĠĠ Ġ@ Implicit Reflection Serializer ĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` encoding Ġa Ġnot Ġserial izable Ġclass Ġthrows Ġa ĠSerialization Exception `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġt Ġ= Ġassert Fails Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġc Ġ= ĠNot Serializable Class (" a ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcodec Ġ= ĠSerialization Codec ( Not Serializable Class :: class , Ġconfiguration ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdocument Ġ= ĠB son Document () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġwriter Ġ= ĠB son Document Writer ( document ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcodec . encode ( writer , Ġc , ĠEncoder Context . builder (). build ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠassertEquals ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Can 't Ġlocate Ġargument - less Ġserializer Ġfor Ġclass Ġorg . lit ote . km ongo . serialization . Serialization Codec Test \$ Not Serializable Class . ĠFor Ġgeneric Ġclasses , Ġsuch Ġas Ġlists , Ġplease Ġprovide Ġserializer Ġexplicitly .", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġt . message ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Implicit Reflection Serializer ĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` de coding Ġa Ġnot Ġserial izable Ġclass Ġthrows Ġa ĠSerialization Exception `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġt Ġ= Ġassert Fails Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġc Ġ= ĠSerializable Class (" a ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcodec Ġ= ĠSerialization Codec ( Serializable Class :: class , Ġconfiguration ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdocument Ġ= ĠB son Document () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġwriter Ġ= ĠB son Document Writer ( document ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcodec . encode ( writer , Ġc , ĠEncoder Context . builder (). build ()) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcodec 2 Ġ= ĠSerialization Codec ( Not Serializable Class :: class , Ġconfiguration ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcodec 2 . decode ( B son Document Reader ( document ), ĠDecoder Context . builder (). build ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠassertEquals ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Can 't Ġlocate Ġargument - less Ġserializer Ġfor Ġclass Ġorg . lit ote . km ongo . serialization . Serialization Codec Test \$ Not Serializable Class . ĠFor Ġgeneric Ġclasses , Ġsuch Ġas Ġlists , Ġplease Ġprovide Ġserializer Ġexplicitly .", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġt . message ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ }