package Ġkotlinx . serialization . csv . decode Ċ Ċ import Ġkotlinx . serialization . Experimental Serialization Api Ċ import Ġkotlinx . serialization . csv . Csv Ċ import Ġkotlinx . serialization . descriptors . Serial Descriptor Ċ import Ġkotlinx . serialization . descriptors . Structure Kind Ċ import Ġkotlinx . serialization . descriptors . element Descriptors Ċ import Ġkotlinx . serialization . encoding . Composite Decoder Ċ import Ġkotlinx . serialization . encoding . Composite Decoder . Companion . DECODE _ DONE Ċ Ċ /** Ċ Ġ* ĠCSV Ġdecoder Ġfor Ġsealed Ġclasses . Ċ Ġ* Ċ Ġ* ĠExpect s Ġcolumns Ġfor Ġall Ġpossible Ġchild Ġclasses . ĠThe Ġcolumns Ġfor Ġthe Ġactual Ġtype Ġshould Ġbe Ġfilled Ġand Ġall Ġother Ċ Ġ* Ġcolumns Ġare Ġexpected Ġto Ġcontain Ġ` null ` Ġvalues . Ċ Ġ*/ Ċ @ Opt In ( Experimental Serialization Api :: class ) Ċ internal Ġclass ĠSe aled Csv Decoder ( ĊĠĠĠ Ġcsv : ĠCsv , ĊĠĠĠ Ġreader : ĠCsv Reader , ĊĠĠĠ Ġparent : ĠCsv Decoder , ĊĠĠĠ Ġprivate Ġval Ġsealed Desc : ĠSerial Descriptor Ċ ) Ġ: ĠCsv Decoder ( csv , Ġreader , Ġparent ) Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġelement Index Ġ= Ġ 0 ĊĊĠĠĠ Ġoverride Ġfun Ġdecode Element Index ( descriptor : ĠSerial Descriptor ): ĠInt Ġ= Ġwhen Ġ{ ĊĠĠĠĠĠĠĠ Ġreader . is Done Ġ|| Ġelement Index Ġ> Ġ 1 Ġ-> ĠDE CODE _ DONE ĊĠĠĠĠĠĠĠ Ġelse Ġ-> Ġelement Index ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġbegin Structure ( descriptor : ĠSerial Descriptor ): ĠComposite Decoder Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsealed Children Ġ= Ġsealed Desc . getElement Descriptor ( 1 ). element Descriptors . toList () ĊĠĠĠĠĠĠĠ Ġval Ġindex Ġ= Ġsealed Children . indexOf ( descriptor ) ĊĠĠĠĠĠĠĠ Ġfor Ġ( inner Desc Ġin Ġsealed Children . sub List ( 0 , Ġindex )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġread Empty Columns ( inner Desc ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( descriptor . kind ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠStructure Kind . OBJECT Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSe aled Object Decoder ( csv , Ġreader , Ġthis ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . begin Structure ( descriptor ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġend Child Structure ( descriptor : ĠSerial Descriptor ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsealed Children Ġ= Ġsealed Desc . getElement Descriptor ( 1 ). element Descriptors . toList () ĊĠĠĠĠĠĠĠ Ġval Ġindex Ġ= Ġsealed Children . indexOf ( descriptor ) ĊĠĠĠĠĠĠĠ Ġfor Ġ( inner Desc Ġin Ġsealed Children . sub List ( index Ġ+ Ġ 1 , Ġsealed Children . size )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġread Empty Columns ( inner Desc ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġelement Index ++ ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdecode String (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġvalue Ġ= Ġsuper . decode String () ĊĠĠĠĠĠĠĠ Ġelement Index ++ ĊĠĠĠĠĠĠĠ Ġreturn Ġvalue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġread Empty Columns ( descriptor : ĠSerial Descriptor ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( inner Desc Ġin Ġdescriptor . element Descriptors . toList ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdecode Null () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠObject Ġdecoder Ġthat Ġdoes Ġnot Ġread Ġany Ġcolumns Ġsince Ġthe Ġobject ĊĠĠĠĠ Ġ* Ġis Ġalready Ġencoded Ġin Ġthe Ġfirst Ġcolumn Ġof Ġthe Ġsealed Ġclass Ġitself . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġclass ĠSe aled Object Decoder ( ĊĠĠĠĠĠĠĠ Ġcsv : ĠCsv , ĊĠĠĠĠĠĠĠ Ġreader : ĠCsv Reader , ĊĠĠĠĠĠĠĠ Ġparent : ĠCsv Decoder ĊĠĠĠ Ġ) Ġ: ĠCsv Decoder ( csv , Ġreader , Ġparent ) Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġdecode Element Index ( descriptor : ĠSerial Descriptor ): ĠInt Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDE CODE _ DONE ĊĠĠĠ Ġ} Ċ } Ċ