package Ġde . br . android . env picker Ċ Ċ import Ġkotlin . reflect . K Class Ċ import Ġkotlin . reflect . jvm . is Accessible Ċ Ċ internal Ġclass ĠDefault Entry Serializer < T Ġ: ĠEntry >( ĊĠĠĠ Ġinstance : ĠT Ċ ) Ġ: ĠEntry Serializer < T > Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval Ġseparator Ġ= Ġ"$ " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġentry Reflection Ġ= ĠEntry Reflection ( instance ) ĊĊĠĠĠ Ġoverride Ġfun Ġserialize ( entry : ĠT ): ĠString Ġ= ĊĠĠĠĠĠĠĠ Ġentry Reflection . fields . map Ġ{ Ġfield Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield . getter . is Accessible Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield . getter . call ( entry ) !! ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. join ToString ( separator Ġ= Ġseparator ) Ġ{ Ġvalue Ġ-> Ġencode ( serialize Field ( value )) Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdeserialize ( str : ĠString ): ĠT Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfields Ġ= Ġentry Reflection . fields ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit . returnType . classifier Ġas ĠK Class < *> Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġvalues Ġ= Ġstr . split ( separator ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( fields . size Ġ!= Ġvalues . size ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalStateException ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Number Ġof Ġfields Ġdoes Ġnot Ġmatch . Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Expected : Ġ${ fields . size }, Ġactual : Ġ${ values . size }" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġvalues . zip ( fields ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġ( value , Ġcls ) Ġ-> Ġdeserialize Field ( decode ( value ), Ġcls ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. let Ġ{ Ġentry Reflection . create Entry ( it ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġserialize Field ( value : ĠAny ) Ġ= Ġvalue . toString () ĊĊĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠ Ġprivate Ġfun Ġ< U Ġ: ĠAny > Ġdeserialize Field ( value : ĠString , Ġfield Class : ĠK Class < U >): ĠU Ġ= ĊĠĠĠĠĠĠĠ Ġwhen Ġ( field Class ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠString :: class Ġ-> Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ ĠInt :: class Ġ-> Ġvalue . toInt () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBoolean :: class Ġ-> Ġvalue . to Boolean Strict () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthrow Ġ ĠIllegalArgumentException (" Can 't Ġdeserialize Ġvalue Ġ$ value Ġof Ġtype Ġ$ field Class .") ĊĠĠĠĠĠĠĠ Ġ} Ġas ĠU ĊĊĠĠĠ Ġprivate Ġfun Ġencode ( str : ĠString ) Ġ= Ġstr . replace ( separator , Ġ"& sep ; ") ĊĠĠĠ Ġprivate Ġfun Ġdecode ( str : ĠString ) Ġ= Ġstr . replace ("& sep ;", Ġseparator ) Ċ }