/* Ċ Ġ* ĠCopyright Ġ( C ) Ġ 2 0 1 6 / 2 0 2 0 ĠL it ote Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ Ċ package Ġcom . github . j ershell . kb son Ċ Ċ import Ġkotlinx . serialization . Decoder Ċ import Ġkotlinx . serialization . Encoder Ċ import Ġkotlinx . serialization . K Serializer Ċ import Ġkotlinx . serialization . Primitive Descriptor Ċ import Ġkotlinx . serialization . Primitive Kind Ċ import Ġkotlinx . serialization . Serial Descriptor Ċ import Ġkotlinx . serialization . Serial Info Ċ import Ġkotlinx . serialization . Serialization Exception Ċ import Ġkotlinx . serialization . Serializer Ċ import Ġkotlinx . serialization . modules . serializers Module Of Ċ import Ġorg . bson . B son Type Ċ import Ġorg . bson . types . Decimal 1 2 8 Ċ import Ġorg . bson . types . ObjectId Ċ import Ġjava . math . BigDecimal Ċ import Ġjava . util . Date Ċ Ċ @ Serial Info Ċ @ Target ( Annotation Target . PROPERTY ) Ċ annotation Ġclass ĠNon Encode Null ĊĊ Ċ @ Serializer ( for Class Ġ= ĠDate :: class ) Ċ object ĠDate Serializer Ġ: ĠK Serializer < Date > Ġ{ ĊĠĠĠ Ġoverride Ġval Ġdescriptor : ĠSerial Descriptor Ġ= ĠPrimitive Descriptor (" Date Serializer ", ĠPrimitive Kind . STRING ) ĊĊĠĠĠ Ġoverride Ġfun Ġserialize ( encoder : ĠEncoder , Ġvalue : ĠDate ) Ġ{ ĊĠĠĠĠĠĠĠ Ġencoder Ġas ĠB son Encoder ĊĠĠĠĠĠĠĠ Ġencoder . encode DateTime ( value . time ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdeserialize ( decoder : ĠDecoder ): ĠDate Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( decoder ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠFlex ible Decoder Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDate ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( decoder . reader . current B son Type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠB son Type . STRING Ġ-> Ġdecoder . decode String (). to Long () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠB son Type . DATE _ TIME Ġ-> Ġdecoder . reader . read DateTime () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthrow ĠSerialization Exception (" Unsupported Ġ${ decoder . reader . current B son Type } Ġreading Ġdate ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthrow ĠSerialization Exception (" Unknown Ġdecoder Ġtype ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } ĊĊ Ċ @ Serializer ( for Class Ġ= ĠBigDecimal :: class ) Ċ object ĠBigDecimal Serializer Ġ: ĠK Serializer < BigDecimal > Ġ{ ĊĠĠĠ Ġoverride Ġval Ġdescriptor : ĠSerial Descriptor Ġ= ĊĠĠĠĠĠĠĠ ĠPrimitive Descriptor (" BigDecimal Serializer ", ĠPrimitive Kind . STRING ) ĊĊĠĠĠ Ġoverride Ġfun Ġserialize ( encoder : ĠEncoder , Ġvalue : ĠBigDecimal ) Ġ{ ĊĠĠĠĠĠĠĠ Ġencoder Ġas ĠB son Encoder ĊĠĠĠĠĠĠĠ Ġencoder . encode Decimal 1 2 8 ( Decimal 1 2 8 ( value )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdeserialize ( decoder : ĠDecoder ): ĠBigDecimal Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( decoder ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠFlex ible Decoder Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( decoder . reader . current B son Type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠB son Type . STRING Ġ-> ĠBigDecimal ( decoder . decode String ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠB son Type . DECIMAL 1 2 8 Ġ-> Ġdecoder . reader . read Decimal 1 2 8 (). big Decimal Value () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthrow ĠSerialization Exception (" Unsupported Ġ${ decoder . reader . current B son Type } Ġreading Ġdecimal 1 2 8 ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthrow ĠSerialization Exception (" Unknown Ġdecoder Ġtype ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } ĊĊ Ċ @ Serializer ( for Class Ġ= ĠByteArray :: class ) Ċ object ĠByteArray Serializer Ġ: ĠK Serializer < ByteArray > Ġ{ ĊĠĠĠ Ġoverride Ġval Ġdescriptor : ĠSerial Descriptor Ġ= ĊĠĠĠĠĠĠĠ ĠPrimitive Descriptor (" ByteArray Serializer ", ĠPrimitive Kind . STRING ) ĊĊĠĠĠ Ġoverride Ġfun Ġserialize ( encoder : ĠEncoder , Ġvalue : ĠByteArray ) Ġ{ ĊĠĠĠĠĠĠĠ Ġencoder Ġas ĠB son Encoder ĊĠĠĠĠĠĠĠ Ġencoder . encode ByteArray ( value ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdeserialize ( decoder : ĠDecoder ): ĠByteArray Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( decoder ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠFlex ible Decoder Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdecoder . reader . read Binary Data (). data ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthrow ĠSerialization Exception (" Unknown Ġdecoder Ġtype ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} Ċ } ĊĊ Ċ @ Serializer ( for Class Ġ= ĠObjectId :: class ) Ċ object ĠObjectId Serializer Ġ: ĠK Serializer < ObjectId > Ġ{ ĊĠĠĠ Ġoverride Ġval Ġdescriptor : ĠSerial Descriptor Ġ= ĠPrimitive Descriptor (" ObjectId Serializer ", ĠPrimitive Kind . STRING ) ĊĊĠĠĠ Ġoverride Ġfun Ġserialize ( encoder : ĠEncoder , Ġvalue : ĠObjectId ) Ġ{ ĊĠĠĠĠĠĠĠ Ġencoder Ġas ĠB son Encoder ĊĠĠĠĠĠĠĠ Ġencoder . encode ObjectId ( value ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdeserialize ( decoder : ĠDecoder ): ĠObjectId Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( decoder ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠFlex ible Decoder Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( decoder . reader . current B son Type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠB son Type . STRING Ġ-> ĠObjectId ( decoder . decode String ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠB son Type . OBJECT _ ID Ġ-> Ġdecoder . reader . read ObjectId () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthrow ĠSerialization Exception (" Unsupported Ġ${ decoder . reader . current B son Type } Ġreading Ġobject Ġid ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthrow ĠSerialization Exception (" Unknown Ġdecoder Ġtype ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} Ċ } Ċ Ċ val ĠDefault Module Ġ= Ġserializers Module Of ( ĊĠĠĠ Ġmap Of ( ĊĠĠĠĠĠĠĠ ĠObjectId :: class Ġto ĠObjectId Serializer , ĊĠĠĠĠĠĠĠ ĠBigDecimal :: class Ġto ĠBigDecimal Serializer , ĊĠĠĠĠĠĠĠ ĠByteArray :: class Ġto ĠByteArray Serializer , ĊĠĠĠĠĠĠĠ ĠDate :: class Ġto ĠDate Serializer ĊĠĠĠ Ġ) Ċ ) Ċ