/* ĊĊĠĠ ĠCopyright Ġ 2 0 1 8 - 2 0 2 1 ĠChar les ĠK orn . ĊĊĠĠ Ġ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 . char les k orn . k aml Ċ Ċ import Ġkotlinx . serialization . Experimental Serialization Api Ċ import Ġkotlinx . serialization . descriptors . Serial Descriptor Ċ import Ġkotlinx . serialization . encoding . Composite Decoder Ċ import Ġkotlinx . serialization . modules . Serial izers Module Ċ Ċ @ Opt In ( Experimental Serialization Api :: class ) Ċ internal Ġclass ĠYaml Map Input ( map : ĠYaml Map , Ġcontext : ĠSerial izers Module , Ġconfiguration : ĠYaml Configuration ) Ġ: ĠYaml Map Like Input Base ( map , Ġcontext , Ġconfiguration ) Ġ{ ĊĠĠĠ Ġprivate Ġval Ġentries List Ġ= Ġmap . entries . entries . toList () ĊĠĠĠ Ġprivate Ġvar Ġnext Index Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġcurrent Entry : ĠMap . Entry < Yaml Scalar , ĠYaml Node > ĊĊĠĠĠ Ġoverride Ġfun Ġdecode Element Index ( descriptor : ĠSerial Descriptor ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( next Index Ġ== Ġentries List . size Ġ* Ġ 2 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠComposite Decoder . DECODE _ DONE ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġentry Index Ġ= Ġnext Index Ġ/ Ġ 2 ĊĠĠĠĠĠĠĠ Ġcurrent Entry Ġ= Ġentries List [ entry Index ] ĊĠĠĠĠĠĠĠ Ġcurrent Key Ġ= Ġcurrent Entry . key ĊĠĠĠĠĠĠĠ Ġcurrently Reading Value Ġ= Ġnext Index Ġ% Ġ 2 Ġ!= Ġ 0 ĊĊĠĠĠĠĠĠĠ Ġcurrent Value Decoder Ġ= Ġwhen Ġ( currently Reading Value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtrue Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcreate For ( current Entry . value , Ġserializers Module , Ġconfiguration , Ġdescriptor . getElement Descriptor ( 1 )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠInc orrect Type Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠInvalid PropertyValue Exception ( propertyName , Ġe . message , Ġe . path , Ġe ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfalse Ġ-> Ġcreate For ( current Key , Ġserializers Module , Ġconfiguration , Ġdescriptor . getElement Descriptor ( 0 )) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġnext Index ++ ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġbegin Structure ( descriptor : ĠSerial Descriptor ): ĠComposite Decoder Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( have Started Reading Entries ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfrom Current Value Ġ{ Ġbegin Structure ( descriptor ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġsuper . begin Structure ( descriptor ) ĊĠĠĠ Ġ} Ċ } Ċ