package Ġorg . li be lek tra . keySet Ext Ċ Ċ import Ġkotlinx . serialization . Serialization Exception Ċ import Ġorg . li be lek tra . Key Set Ċ import Ġorg . li be lek tra . keySet Ext . serial format . Key Set Format Ċ Ċ /** Ċ Ġ* ĠConverts Ġa ĠKey Set Ġto Ġa ĠKotlin Ġdata Ġclass Ġusing ĠKotlin ĠJson ĠSerialization Ġwith Ġsupport Ġfor ĠCollections Ċ Ġ* Ċ Ġ* ĠThe Ġdata Ġclass Ġmust Ġbe Ġannotated Ġwith Ġ@ Serializable Ċ Ġ* Ċ Ġ* ĠThe ĠKey Set Ġmust Ġcontain Ġall Ġproperties Ġof Ġthe Ġdata Ġclass Ġeither Ġon Ġthe Ġroot - level Ġor Ġone Ġlevel Ġbelow Ġthe Ġroot - level Ċ Ġ* Ċ Ġ* ĠSimple ĠExample : Ċ Ġ* Ċ Ġ* ĠĠĠĠĠ Ġdata Ġclass ĠUser ( val Ġusername : ĠString , Ġval Ġpassword : ĠString ) Ċ Ġ* Ċ Ġ* ĠĠĠĠĠ ĠKey Set Ġ(< key Name > Ġto Ġ< value >): Ċ Ġ* ĠĠĠĠĠ Ġ/ username Ġto Ġ" j ane " Ċ Ġ* ĠĠĠĠĠ Ġ/ password Ġto Ġ" 1 2 3 4 " Ċ Ġ* Ċ Ġ* ĠĠĠĠĠ Ġkey Set . convert < User >() Ċ Ġ* ĠĠĠĠĠ Ġ// ĠUser ( username Ġ= Ġ" j ane ", Ġpassword Ġ= Ġ" 1 2 3 4 ") Ċ Ġ* Ċ Ġ* ĠExample Ġwith Ġbelow Ġroot Ġlevel : Ċ Ġ* Ċ Ġ* ĠĠĠĠĠ ĠKey Set Ġ(< key Name > Ġto Ġ< value >): Ċ Ġ* ĠĠĠĠĠ Ġ/ user / username Ġto Ġ" j ane " Ċ Ġ* ĠĠĠĠĠ Ġ/ user / password Ġto Ġ" 1 2 3 4 " Ċ Ġ* Ċ Ġ* ĠĠĠĠĠ Ġkey Set . convert < User >() Ċ Ġ* ĠĠĠĠĠ Ġ// ĠUser ( username Ġ= Ġ" j ane ", Ġpassword Ġ= Ġ" 1 2 3 4 ") Ċ Ġ* Ċ Ġ* ĠExample Ġwith Ġnesting : Ċ Ġ* Ċ Ġ* ĠĠĠĠĠ Ġdata Ġclass ĠEmployee ( val Ġuser : ĠUser , Ġval Ġsalary : ĠDouble ) Ċ Ġ* Ċ Ġ* ĠĠĠĠĠ ĠKey Set Ġ(< key Name > Ġto Ġ< value >): Ċ Ġ* ĠĠĠĠĠ Ġ/ user / username Ġto Ġ" j ane " Ċ Ġ* ĠĠĠĠĠ Ġ/ user / password Ġto Ġ" 1 2 3 4 " Ċ Ġ* ĠĠĠĠĠ Ġ/ salary Ġto Ġ" 4 3 2 1 . 0 " Ċ Ġ* Ċ Ġ* ĠĠĠĠĠ Ġkey Set . convert < Employee >() Ċ Ġ* ĠĠĠĠĠ Ġ// ĠEmployee ( user Ġ= ĠUser ( username Ġ= Ġ" j ane ", Ġpassword Ġ= Ġ" 1 2 3 4 "), Ġsalary Ġ= Ġ 4 3 2 1 . 0 ) Ċ Ġ* Ċ Ġ* Ġ@ param Ġparent Key Ġstarting Ġpoint Ġfor Ġserialization Ġof Ġthis ĠKey Set , Ġonly Ġkeys Ġbelow Ġthis Ġkey Ġare Ġconsidered Ġfor Ġserialization Ċ Ġ* Ġ@ throws ĠSerialization Exception Ġwhen Ġdecoding Ġfails Ġor Ġthe Ġproperties Ġare Ġnot Ġon Ġroot - level Ġor Ġone Ġbelow Ġroot Ċ Ġ* Ġ@ return Ġan Ġobject Ġdecoded Ġfrom Ġthis ĠKey Set Ġ( see Ġ[ Key Set Format . decode From Key Set ]]) Ċ Ġ*/ Ċ inline Ġfun Ġ< re ified ĠT Ġ: ĠAny > ĠKey Set . convert ( parent Key : ĠString ? Ġ= Ġnull ): ĠT Ġ{ ĊĠĠĠ Ġreturn ĠKey Set Format . decode From Key Set ( this , Ġparent Key ) Ċ } Ċ