/* Ċ Ġ* ĠCopyright Ġ 2 0 2 1 Ġi Mot ions ĠA / S Ċ Ġ* Ċ Ġ* Ġ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 Ġio . im otions . bson 4 k . decoder Ċ Ċ import Ġio . im otions . bson 4 k . B son Ċ import Ġio . im otions . bson 4 k . B son Kind Ċ import Ġio . im otions . bson 4 k . common .* Ċ import Ġio . kot est . core . spec . style . String Spec Ċ import Ġio . kot est . matchers . shouldBe Ċ import Ġkotlinx . serialization . Experimental Serialization Api Ċ import Ġkotlinx . serialization . builtins . Map Serializer Ċ import Ġkotlinx . serialization . builtins . serializer Ċ import Ġorg . bson . B son Binary Ċ import Ġorg . bson . Document Ċ import Ġorg . bson . Uuid Representation Ċ import Ġjava . util .* Ċ Ċ @ Experimental Serialization Api Ċ class ĠB son Map Decoder Test Ġ: ĠString Spec ({ ĊĠĠĠ Ġ" Decode Ġprimitives Ġmap " Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmap Ġ= Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" a " Ġto Ġtrue , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" b " Ġto Ġfalse ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval Ġdocument Ġ= ĠDocument ( map ). to B son Document () ĊĠĠĠĠĠĠĠ Ġprintln ( document . toJson ()) ĊĊĠĠĠĠĠĠĠ Ġval Ġdeserialized Ġ= Ġbson . decode From B son Document < Map < String , ĠBoolean >>( document ) ĊĠĠĠĠĠĠĠ Ġdeserialized ĠshouldBe Ġmap ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ" Decode Ġprimitives Ġmap Ġwith ĠInt Ġkeys " Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmap Ġ= Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠ 2 0 Ġto Ġtrue , ĊĠĠĠĠĠĠĠĠĠĠĠĠ 3 0 Ġto Ġfalse ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval Ġdocument Ġ= ĠDocument ( map . map Keys Ġ{ Ġit . key . toString () Ġ}). to B son Document () ĊĠĠĠĠĠĠĠ Ġprintln ( document . toJson ()) ĊĊĠĠĠĠĠĠĠ Ġval Ġdeserialized Ġ= Ġbson . decode From B son Document < Map < Int , ĠBoolean >>( document ) ĊĠĠĠĠĠĠĠ Ġdeserialized ĠshouldBe Ġmap ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ" Decode Ġto Ġmap Ġwith Ġcomposite Ġvalues " Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmap Ġ= Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠ 1 0 Ġto ĠWrapper ( 4 2 . 5 F ), ĊĠĠĠĠĠĠĠĠĠĠĠĠ 2 0 Ġto ĠWrapper ( 1 2 3 . 4 5 F ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval Ġdocument Ġ= ĠDocument ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" map ", ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDocument () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. append (" 1 0 ", ĠDocument (" value ", Ġ 4 2 . 5 F )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. append (" 2 0 ", ĠDocument (" value ", Ġ 1 2 3 . 4 5 F )) ĊĠĠĠĠĠĠĠ Ġ). to B son Document () ĊĠĠĠĠĠĠĠ Ġprintln ( document . toJson ()) ĊĊĠĠĠĠĠĠĠ Ġval Ġdeserialized Ġ= Ġbson . decode From B son Document < Map Wrapper < Int , ĠWrapper < Float >> >( document ) ĊĠĠĠĠĠĠĠ Ġdeserialized ĠshouldBe ĠMap Wrapper ( map ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ" Decode Ġto Ġmap Ġwith Ġnon - primitive Ġkeys " Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdoc Ġ= ĠDocument ( UUID . randomUUID (). toString (), ĠDocument (" uuid ", ĠUUID . randomUUID (). toString ())) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. append ( UUID . randomUUID (). toString (), ĠDocument (" uuid ", ĠUUID . randomUUID (). toString ())) ĊĊĠĠĠĠĠĠĠ Ġbson . decode From B son Document ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMap Serializer ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠUUID Serializer , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠString UUID Container . serializer () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdoc . to B son Document () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ" Decode Ġto Ġmap Ġwith Ġnon - primitive Ġkeys Ġand Ġtype Ġmapping " Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmapping B son Ġ= ĠB son Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Type Mapping ( UUID Serializer , ĠB son Kind . UUID ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġdoc Ġ= ĠDocument ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠUUID . randomUUID (). toString (), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDocument (" uuid ", ĠB son Binary ( UUID . randomUUID (), ĠU uid Representation . STANDARD )) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. append ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠUUID . randomUUID (). toString (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDocument ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" uuid ", ĠB son Binary ( UUID . randomUUID (), ĠU uid Representation . STANDARD ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. also Ġ{ Ġprintln ( it ) Ġ} ĊĊĠĠĠĠĠĠĠ Ġmapping B son . decode From B son Document ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMap Serializer ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠUUID Serializer , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠString UUID Container . serializer () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdoc . to B son Document () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ" Decode Ġto Ġmap Ġwith Ġcomposite Ġ( structured ) Ġkeys " Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġstructured B son Ġ= ĠB son Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġallow Structured Map Keys Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġdoc Ġ= ĠDocument ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" value ", ĊĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDocument (" x ", Ġ" foo "). append (" y ", Ġ" bar "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 L , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDocument (" x ", Ġ" hello "). append (" y ", Ġ" world "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 0 _ 0 0 0 _ 0 0 0 L ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. also Ġ{ Ġprintln ( it . toJson ()) Ġ} ĊĊĠĠĠĠĠĠĠ Ġstructured B son . decode From B son Document ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠWrapper . serializer ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMap Serializer ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠWrapper 2 . serializer ( String . serializer (), ĠString . serializer ()), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLong . serializer () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdoc . to B son Document () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ }) Ċ