package Ġkotlinx . serialization . csv . decode Ċ Ċ import Ġkotlinx . serialization . Experimental Serialization Api Ċ import Ġkotlinx . serialization . csv . Csv Ċ import Ġkotlinx . serialization . csv . Unknown Column Header Exception Ċ import Ġkotlinx . serialization . csv . Unsupported Serial Descriptor Exception Ċ import Ġkotlinx . serialization . csv . config . Csv Config Ċ import Ġkotlinx . serialization . descriptors . Pol ymorphic Kind Ċ import Ġkotlinx . serialization . descriptors . Serial Descriptor Ċ import Ġkotlinx . serialization . descriptors . Structure Kind Ċ import Ġkotlinx . serialization . encoding . Abstract Decoder Ċ import Ġkotlinx . serialization . encoding . Composite Decoder Ċ import Ġkotlinx . serialization . encoding . Composite Decoder . Companion . UNKNOWN _ NAME Ċ import Ġkotlinx . serialization . modules . Serial izers Module Ċ import Ġkotlin . collections . set Ċ Ċ /** Ċ Ġ* ĠDefault ĠCSV Ġdecoder . Ċ Ġ*/ Ċ @ Opt In ( Experimental Serialization Api :: class ) Ċ internal Ġabstract Ġclass ĠCsv Decoder ( ĊĠĠĠ Ġprotected Ġval Ġcsv : ĠCsv , ĊĠĠĠ Ġprotected Ġval Ġreader : ĠCsv Reader , ĊĠĠĠ Ġprivate Ġval Ġparent : ĠCsv Decoder ? Ċ ) Ġ: ĠAbstract Decoder () Ġ{ ĊĊĠĠĠ Ġoverride Ġval Ġserializers Module : ĠSerial izers Module ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġcsv . serializers Module ĊĊĠĠĠ Ġprotected Ġval Ġconfig : ĠCsv Config ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġcsv . config ĊĊĠĠĠ Ġprivate Ġvar Ġheaders : ĠHeaders ? Ġ= Ġnull ĊĊĠĠĠ Ġoverride Ġfun Ġbegin Structure ( descriptor : ĠSerial Descriptor ): ĠComposite Decoder Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( descriptor . kind ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠStructure Kind . LIST , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠStructure Kind . MAP Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCollection Csv Decoder ( csv , Ġreader , Ġthis ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠStructure Kind . CLASS Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠClass Csv Decoder ( csv , Ġreader , Ġthis , Ġheaders ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠStructure Kind . OBJECT Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠObject Csv Decoder ( csv , Ġreader , Ġthis ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠPol ymorphic Kind . SE AL ED Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSe aled Csv Decoder ( csv , Ġreader , Ġthis , Ġdescriptor ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠPol ymorphic Kind . OPEN Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠClass Csv Decoder ( csv , Ġreader , Ġthis , Ġheaders ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthrow ĠUnsupported Serial Descriptor Exception ( descriptor ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġend Structure ( descriptor : ĠSerial Descriptor ) Ġ{ ĊĠĠĠĠĠĠĠ Ġparent ?. end Child Structure ( descriptor ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġopen Ġfun Ġend Child Structure ( descriptor : ĠSerial Descriptor ) Ġ{ ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdecode Byte (): ĠByte Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġdecode Column (). to Byte () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdecode Short (): ĠShort Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġdecode Column (). to Short () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdecode Int (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġdecode Column (). toInt () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdecode Long (): ĠLong Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġdecode Column (). to Long () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdecode Float (): ĠFloat Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġdecode Column (). toFloat () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdecode Double (): ĠDouble Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġdecode Column (). toDouble () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdecode Boolean (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġdecode Column (). to Boolean () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdecode Char (): ĠChar Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġvalue Ġ= Ġdecode Column () ĊĠĠĠĠĠĠĠ Ġrequire ( value . length Ġ== Ġ 1 ) ĊĠĠĠĠĠĠĠ Ġreturn Ġvalue [ 0 ] ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdecode String (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġdecode Column () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdecode NotNull Mark (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ! reader . isNull Token () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdecode Null (): ĠNothing ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġvalue Ġ= Ġdecode Column () ĊĠĠĠĠĠĠĠ Ġrequire ( value Ġ== Ġconfig . null String ) Ġ{ Ġ" Expected Ġ'${ config . null String }' Ġbut Ġwas Ġ'$ value '. " Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdecode Enum ( enum Descriptor : ĠSerial Descriptor ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġenum Descriptor . getElement Index ( decode Column ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġopen Ġfun Ġdecode Column () Ġ= Ġreader . read Column () ĊĊĠĠĠ Ġprotected Ġfun Ġread Headers ( descriptor : ĠSerial Descriptor ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( config . has Header Record Ġ&& Ġheaders Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . headers Ġ= Ġread Headers ( descriptor , Ġ"") ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġread Trailing Delimiter () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġread Headers ( descriptor : ĠSerial Descriptor , Ġprefix : ĠString ): ĠHeaders Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġheaders Ġ= ĠHeaders () ĊĠĠĠĠĠĠĠ Ġvar Ġposition Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġwhile Ġ(! reader . is Done Ġ&& Ġreader . is First Record ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġoffset Ġ= Ġreader . offset ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreader . mark () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠRead Ġheader Ġvalue Ġand Ġcheck Ġif Ġit Ġ( still ) Ġstarts Ġwith Ġrequired Ġprefix ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvalue Ġ= Ġreader . read Column () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! value . startsWith ( prefix )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreader . reset () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠIf Ġthere Ġis Ġan Ġexact Ġname Ġmatch , Ġstore Ġthe Ġheader , Ġotherwise Ġtry Ġreading Ġclass Ġstructure ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġheader Ġ= Ġvalue . substring After ( prefix ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġheader Index Ġ= Ġdescriptor . getElement Index ( header ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( header Index Ġ!= ĠUNKNOWN _ NAME ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġheaders [ position ] Ġ= Ġheader Index ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreader . un mark () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġname Ġ= Ġheader . substring Before ( config . header Separator ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġname Index Ġ= Ġdescriptor . getElement Index ( name ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( name Index Ġ!= ĠUNKNOWN _ NAME ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġchild Desc Ġ= Ġdescriptor . getElement Descriptor ( name Index ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( child Desc . kind Ġis ĠStructure Kind . CLASS ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreader . reset () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġheaders [ position ] Ġ= Ġname Index ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġheaders [ name Index ] Ġ= Ġread Headers ( child Desc , Ġ"$ prefix $ name .") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreader . un mark () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( csv . config . ignore Unknown Columns ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġheaders [ position ] Ġ= ĠUNKNOWN _ NAME ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreader . un mark () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( value Ġ== Ġ"" Ġ&& Ġ! reader . is First Record Ġ&& Ġconfig . has Trailing Delimiter ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreader . un mark () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠUnknown Column Header Exception ( offset , Ġvalue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġposition ++ ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġheaders ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġfun Ġread Trailing Delimiter () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( config . has Trailing Delimiter ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreader . read EndOf Record () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġclass ĠHeaders Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġmap Ġ= Ġmutable Map Of < Int , ĠInt >() ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġsub Headers Ġ= Ġmutable Map Of < Int , ĠHeaders >() ĊĊĠĠĠĠĠĠĠ Ġval Ġsize ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget () Ġ= Ġmap . size ĊĊĠĠĠĠĠĠĠ Ġoperator Ġfun Ġget ( position : ĠInt ) Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmap [ position ] ĊĊĠĠĠĠĠĠĠ Ġoperator Ġfun Ġset ( key : ĠInt , Ġvalue : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmap [ key ] Ġ= Ġvalue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġget Sub Headers ( position : ĠInt ) Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsub Headers . getOrElse ( position ) Ġ{ Ġnull Ġ} ĊĊĠĠĠĠĠĠĠ Ġoperator Ġfun Ġset ( key : ĠInt , Ġvalue : ĠHeaders ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsub Headers [ key ] Ġ= Ġvalue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ