package Ġcom . github . ag com . bson . serialization Ċ Ċ import Ġcom . github . ag com . bson . serialization . de coders . read B son Ċ import Ġcom . github . ag com . bson . serialization . en coders . write B son Ċ import Ġcom . github . ag com . bson . serialization . serializers .* Ċ import Ġcom . github . ag com . bson . serialization . utils .* Ċ import Ġkotlinx . serialization .* Ċ import Ġkotlinx . serialization . internal . Abstract Pol ymorphic Serializer Ċ import Ġkotlinx . serialization . modules .* Ċ import Ġorg . bson .* Ċ import Ġorg . bson . io . Basic Output Buffer Ċ import Ġorg . bson . io . ByteBuffer B son Input Ċ import Ġjava . nio . ByteBuffer Ċ Ċ /** Ċ Ġ* ĠMain Ġentry Ġpoint Ġto Ġwork Ġwith ĠBSON Ġserialization . Ċ Ġ* Ċ Ġ* ĠIf Ġsome Ġserializers Ġare Ġpresent Ġin Ġboth Ġ[ context ] Ġand Ġthe Ġdefault Ġbson Ġcontext , Ġserializers Ġfrom Ġ[ context ] Ġwill Ġtake Ġplace . Ċ Ġ*/ Ċ class ĠB son ( ĊĠĠĠ Ġval Ġconfiguration : ĠB son Configuration Ġ= ĠB son Configuration . ST ABLE , ĊĠĠĠ Ġcontext : ĠSerial Module Ġ= ĠEmpty Module Ċ ) Ġ: ĠBinary Format Ġ{ ĊĊĠĠĠ Ġoverride Ġval Ġcontext : ĠSerial Module Ġ= Ġdefault B son Module . overwrite With ( context ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠTransform Ġa Ġ[ value ] Ġinto Ġa Ġ[ B son Value ]. ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġ< T > Ġto B son ( serializer : ĠSerialization Strategy < T >, Ġvalue : ĠT ): ĠB son Value Ġ= Ġwrite B son ( value , Ġserializer ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠTransform Ġa Ġ[ B son Value ] Ġinto Ġan Ġobject . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġ< T > Ġfrom B son ( de serializer : ĠDeserial ization Strategy < T >, Ġbson Value : ĠB son Value ): ĠT Ġ= ĊĠĠĠĠĠĠĠ Ġread B son ( bson Value , Ġde serializer ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠRead Ġa Ġ[ B son Document ] Ġfrom Ġthe Ġgiven Ġ[ bytes ]. ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠNote : ĠB son Ġarrays Ġare Ġjust Ġdocuments Ġwith Ġnumerical Ġconsecutive Ġindexes Ġ( starting Ġfrom Ġ 0 ) Ġas Ġkeys . ĊĠĠĠĠ Ġ* ĠYou Ġcan Ġuse Ġ[ load B son Array ] Ġif Ġyou Ġwant Ġto Ġdirectly Ġread Ġan Ġarray , Ġor Ġuse Ġconvert or Ġfunction Ġ[ to B son Array ] Ġafter Ġreading Ġa Ġdocument . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġload B son Document ( bytes : ĠByteArray ): ĠB son Document Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠByteBuffer B son Input ( Byte Buf N IO ( ByteBuffer . wrap ( bytes ))). use Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . read B son Document () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( ex : ĠBSON Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠB son De coding Exception ( ex . message Ġ?: Ġ"", Ġex ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠRead Ġa Ġ[ B son Array ] Ġfrom Ġthe Ġgiven Ġ[ bytes ]. ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġload B son Array ( bytes : ĠByteArray ): ĠB son Array Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġload B son Document ( bytes ). to B son Array () Ġ?: Ġthrow ĠB son De coding Exception (" Not Ġa Ġbson Ġarray ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠWrite Ġa Ġ[ B son Document ] Ġinto Ġa Ġ[ ByteArray ]. ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġdump B son ( bson Document : ĠB son Document ): ĠByteArray Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠBasic Output Buffer (). use Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . write B son Document ( bson Document ); ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( ex : ĠBSON Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠB son EncodingException ( ex . message Ġ?: Ġ"", Ġex ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . toByteArray () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠWrite Ġa Ġ[ B son Array ] Ġinto Ġa Ġ[ ByteArray ]. ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġdump B son ( bson Array : ĠB son Array ): ĠByteArray Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġdump B son ( bson Array . to B son Document ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠWrite Ġ[ value ] Ġinto Ġa Ġ[ ByteArray ] Ġaccording Ġto Ġbson Ġformat Ġspecification . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠWarning : ĠDumping Ġprimitives Ġare Ġnot Ġsupported . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġ< T > Ġdump ( serializer : ĠSerialization Strategy < T >, Ġvalue : ĠT ): ĠByteArray Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġto B son ( serializer , Ġvalue ). fold ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdocument Ġ= Ġ{ Ġdump B son ( it ) Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġarray Ġ= Ġ{ Ġdump B son ( it ) Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprimitive Ġ= Ġ{ Ġthrow ĠB son EncodingException (" Dump ing Ġprimitives ") Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠRead Ġan Ġobject Ġfrom Ġthe Ġgiven Ġ[ bytes ] Ġaccording Ġto Ġbson Ġformat Ġspecification . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠWarning : ĠLoading Ġprimitives Ġare Ġnot Ġsupported . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Opt In ( Internal Serialization Api :: class ) ĊĠĠĠ Ġoverride Ġfun Ġ< T > Ġload ( de serializer : ĠDeserial ization Strategy < T >, Ġbytes : ĠByteArray ): ĠT Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdoc Ġ= Ġload B son Document ( bytes ) ĊĠĠĠĠĠĠĠ Ġval Ġarray Ġby Ġlazy ( mode Ġ= ĠLazy Thread Safety Mode . NONE ) Ġ{ Ġdoc . to B son Array () Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġtrial And Error (): ĠT Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfrom B son ( de serializer , Ġdoc ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( doc Ex : ĠB son Exception ) Ġ{ Ġ// ĠDocument Ġfailed ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfrom B son ( de serializer , Ġarray Ġ?: Ġthrow ĠB son De coding Exception (" Not Ġa Ġbson Ġarray ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( array Ex : ĠB son Exception ) Ġ{ Ġ// ĠArray Ġfailed ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdoc Ex . add Sup pressed ( array Ex ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow Ġdoc Ex ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( de serializer . descriptor . kind ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠStructure Kind . LIST Ġ-> Ġfrom B son ( de serializer , Ġarray Ġ?: Ġthrow ĠB son De coding Exception (" Not Ġa Ġbson Ġarray ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠStructure Kind Ġ-> Ġfrom B son ( de serializer , Ġdoc ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠPrimitive Kind , ĠUnion Kind . ENUM _ KIND Ġ-> Ġthrow ĠB son De coding Exception (" Loading Ġprimitives ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠPol ymorphic Kind Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( de serializer Ġis ĠAbstract Pol ymorphic Serializer ) Ġfrom B son ( de serializer , Ġdoc ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġtrial And Error () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠUnion Kind . CONTEXT UAL Ġ-> Ġtrial And Error () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ } Ċ Ċ private Ġval Ġdefault B son Module : ĠSerial Module Ġ= ĠSerial izers Module Ġ{ ĊĠĠĠ Ġcontext ual ( B son Value Serializer ) ĊĠĠĠ Ġcontext ual ( B son Document Serializer ) ĊĠĠĠ Ġcontext ual ( B son Array Serializer ) ĊĠĠĠ Ġcontext ual ( B son Binary Serializer ) ĊĠĠĠ Ġcontext ual ( B son Boolean Serializer ) ĊĠĠĠ Ġcontext ual ( B son DateTime Serializer ) ĊĠĠĠ Ġcontext ual ( B son Decimal 1 2 8 Serializer ) ĊĠĠĠ Ġcontext ual ( B son Double Serializer ) ĊĠĠĠ Ġcontext ual ( B son Int 3 2 Serializer ) ĊĠĠĠ Ġcontext ual ( B son Int 6 4 Serializer ) ĊĠĠĠ Ġcontext ual ( B son JavaScript Serializer ) ĊĠĠĠ Ġcontext ual ( B son Null Serializer ) ĊĠĠĠ Ġcontext ual ( B son Number Serializer ) ĊĠĠĠ Ġcontext ual ( B son ObjectId Serializer ) ĊĠĠĠ Ġcontext ual ( B son Regular Expression Serializer ) ĊĠĠĠ Ġcontext ual ( B son String Serializer ) ĊĠĠĠ Ġcontext ual ( B son Db Pointer Serializer ) ĊĠĠĠ Ġcontext ual ( B son JavaScript With Scope Serializer ) ĊĠĠĠ Ġcontext ual ( B son Max Key Serializer ) ĊĠĠĠ Ġcontext ual ( B son Min Key Serializer ) ĊĠĠĠ Ġcontext ual ( B son Symbol Serializer ) ĊĠĠĠ Ġcontext ual ( B son Undefined Serializer ) ĊĠĠĠ Ġcontext ual ( B son Timestamp Serializer ) ĊĊĠĠĠ Ġcontext ual ( Binary Serializer ) ĊĠĠĠ Ġcontext ual ( ObjectId Serializer ) ĊĠĠĠ Ġcontext ual ( Decimal 1 2 8 Serializer ) ĊĠĠĠ Ġcontext ual ( Regex Serializer ) ĊĠĠĠ Ġcontext ual ( Pattern Serializer ) ĊĠĠĠ Ġcontext ual ( Code Serializer ) ĊĠĠĠ Ġcontext ual ( ByteArray Serializer ) ĊĠĠĠ Ġcontext ual ( UUID Serializer ()) ĊĠĠĠ Ġcontext ual ( Date Serializer ) ĊĠĠĠ Ġcontext ual ( Max Key Serializer ) ĊĠĠĠ Ġcontext ual ( Min Key Serializer ) ĊĊĠĠĠ Ġinclude ( bson Temporal Module ) Ċ }