/* Ċ Ġ* ĠCopyright Ġ 2 0 1 4 - 2 0 2 0 ĠJetBrains Ġs . r . o Ġand Ġcontributors . ĠUse Ġof Ġthis Ġsource Ġcode Ġis Ġgoverned Ġby Ġthe ĠApache Ġ 2 . 0 Ġlicense . Ċ Ġ*/ Ċ Ċ package Ġio . ktor . client . features . json . tests Ċ Ċ import Ġio . ktor . client . call .* Ċ import Ġio . ktor . client . features . json . serializer .* Ċ import Ġio . ktor . utils . io . streams .* Ċ import Ġkotlinx . serialization .* Ċ import Ġkotlinx . serialization . Serializable Ċ import Ġkotlinx . serialization . builtins .* Ċ import Ġkotlinx . serialization . json .* Ċ import Ġkotlinx . serialization . modules .* Ċ import Ġkotlin . test .* Ċ Ċ class ĠKotlin x Serializer Test Ġ{ ĊĠĠĠ Ġ@ Suppress (" EXPERIMENT AL _ API _ USAGE _ ERROR ") ĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Custom Deserializer () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġup wrapper Ġ= Ġindex List Un wrapper < Test Entry >() ĊĊĠĠĠĠĠĠĠ Ġval Ġserializer Ġ= ĠJson Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġignore Unknown Keys Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġserializers Module Ġ= Ġserializers Module Of ( up wrapper ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġkotlinx Serializer Ġ= ĠKotlin x Serializer ( serializer ) ĊĠĠĠĠĠĠĠ Ġval Ġjson Ġ= Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" something ": Ġ" something ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" data ": Ġ[ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{" a ": Ġ" hello ", Ġ" b ": Ġ 4 2 }, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{" a ": Ġ" bye ", Ġ" b ": Ġ 4 2 4 2 } ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ""" . trim Indent (). byte InputStream (). as Input () ĊĊĠĠĠĠĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠĠĠĠĠ Ġval Ġdata Ġ= Ġkotlinx Serializer . read ( type Info < List < Test Entry >> (), Ġjson ) Ġas ĠList < Test Entry > ĊĊĠĠĠĠĠĠĠ ĠassertEquals ( 2 , Ġdata . size ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( Test Entry (" hello ", Ġ 4 2 ), Ġdata [ 0 ]) ĊĠĠĠĠĠĠĠ ĠassertEquals ( Test Entry (" bye ", Ġ 4 2 4 2 ), Ġdata [ 1 ]) ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ Serializable Ċ data Ġclass ĠTest Entry ( val Ġa : ĠString , Ġval Ġb : ĠInt ) Ċ Ċ inline Ġfun Ġ< re ified ĠT > Ġindex List Un wrapper ( Ċ ) Ġ= Ġobject Ġ: ĠJson Transform ing Serializer < List < T >>( List Serializer < T >( serializer < T > ())) Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġtransform Deserialize ( element : ĠJson Element ): ĠJson Element Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( element Ġis ĠJson Array ) Ġelement Ġelse Ġelement . jsonObject . values . first OrNull Ġ{ Ġit Ġis ĠJson Array Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġerror (" Collection Ġnot Ġfound Ġin Ġjson ") ĊĠĠĠ Ġ} Ċ } Ċ