/* Ċ Ġ* ĠCopyright Ġ 2 0 2 1 ĠI ce Rock ĠMAG ĠInc . ĠUse Ġof Ġthis Ġsource Ġcode Ġis Ġgoverned Ġby Ġthe ĠApache Ġ 2 . 0 Ġlicense . Ċ Ġ*/ Ċ Ċ package Ġdev . icer ock . mo ko . network . schemas Ċ Ċ import Ġdev . icer ock . mo ko . network . exceptions . Data Not Fit Any Of Schema Ċ import Ġdev . icer ock . mo ko . network . exceptions . Data Not Fit OneOf Schema Ċ import Ġkotlinx . serialization . K Serializer Ċ import Ġkotlinx . serialization . descriptors . Primitive Kind Ċ import Ġkotlinx . serialization . descriptors . Primitive Serial Descriptor Ċ import Ġkotlinx . serialization . descriptors . Serial Descriptor Ċ import Ġkotlinx . serialization . encoding . Decoder Ċ import Ġkotlinx . serialization . encoding . Encoder Ċ import Ġkotlinx . serialization . json . Json Ċ import Ġkotlinx . serialization . json . Json Decoder Ċ import Ġkotlinx . serialization . json . Json Element Ċ import Ġkotlinx . serialization . json . Json Encoder Ċ import Ġkotlinx . serialization . json . JsonObject Ċ import Ġkotlinx . serialization . json . build JsonObject Ċ Ċ abstract Ġclass ĠComp osed Schema Serializer < T >( serial Name : ĠString ) Ġ: ĠK Serializer < T > Ġ{ ĊĠĠĠ Ġoverride Ġval Ġdescriptor : ĠSerial Descriptor Ġ= ĊĠĠĠĠĠĠĠ ĠPrimitive Serial Descriptor ( serial Name , ĠPrimitive Kind . STRING ) ĊĊĠĠĠ Ġoverride Ġfun Ġdeserialize ( decoder : ĠDecoder ): ĠT Ġ{ ĊĠĠĠĠĠĠĠ Ġdecoder Ġas ĠJson Decoder ĊĊĠĠĠĠĠĠĠ Ġval Ġjson Element Ġ= Ġdecoder . decode Serializable Value ( Json Element . serializer ()) ĊĊĠĠĠĠĠĠĠ Ġval Ġjson Ġ= ĠJson ( from Ġ= Ġdecoder . json ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġignore Unknown Keys Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġdecode Json ( json , Ġjson Element ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġserialize ( encoder : ĠEncoder , Ġvalue : ĠT ) Ġ{ ĊĠĠĠĠĠĠĠ Ġencoder Ġas ĠJson Encoder ĊĊĠĠĠĠĠĠĠ Ġval Ġjson Objects Ġ= Ġencode Json ( encoder . json , Ġvalue ) ĊĊĠĠĠĠĠĠĠ Ġval Ġoutput Object Ġ= Ġbuild JsonObject Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġjson Objects . forEach Ġ{ ĠjsonObject Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠjsonObject . entries . forEach Ġ{ Ġ( key , Ġvalue ) Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġput ( key , Ġvalue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġencoder . encode Json Element ( output Object ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġabstract Ġfun Ġdecode Json ( json : ĠJson , Ġelement : ĠJson Element ): ĠT ĊĊĠĠĠ Ġabstract Ġfun Ġencode Json ( json : ĠJson , Ġvalue : ĠT ): ĠList < JsonObject > ĊĊĠĠĠ Ġprotected Ġfun Ġensure Any Item Is Success ( element : ĠJson Element , Ġresults : ĠList < Result <* >>) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġis All Failed Ġ= Ġresults . all Ġ{ Ġit . is Failure Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( is All Failed . not ()) Ġreturn ĊĊĠĠĠĠĠĠĠ Ġthrow ĠData Not Fit Any Of Schema ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdata Ġ= Ġelement , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcauses Ġ= Ġresults . map NotNull Ġ{ Ġit . exception OrNull () Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġfun Ġensure Only One Item Is Success ( element : ĠJson Element , Ġresults : ĠList < Result <* >>) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfailed Count Ġ= Ġresults . count Ġ{ Ġit . is Failure Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( failed Count Ġ== Ġresults . size Ġ- Ġ 1 ) Ġreturn ĊĊĠĠĠĠĠĠĠ Ġthrow ĠData Not Fit OneOf Schema ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdata Ġ= Ġelement , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresults Ġ= Ġresults ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ } Ċ