/* Ċ Ġ* Ġ@ (# ) ĠJSON Delegate . kt Ċ Ġ* Ċ Ġ* Ġjson - kotlin ĠKotlin ĠJSON ĠAuto ĠSerialize / deserialize Ċ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 1 9 ĠPeter ĠWall Ċ Ġ* Ċ Ġ* ĠPermission Ġis Ġhereby Ġgranted , Ġfree Ġof Ġcharge , Ġto Ġany Ġperson Ġobtaining Ġa Ġcopy Ċ Ġ* Ġof Ġthis Ġsoftware Ġand Ġassociated Ġdocumentation Ġfiles Ġ( the Ġ" Software "), Ġto Ġdeal Ċ Ġ* Ġin Ġthe ĠSoftware Ġwithout Ġrestriction , Ġincluding Ġwithout Ġlimitation Ġthe Ġrights Ċ Ġ* Ġto Ġuse , Ġcopy , Ġmodify , Ġmerge , Ġpublish , Ġdistribute , Ġsublicense , Ġand / or Ġsell Ċ Ġ* Ġcopies Ġof Ġthe ĠSoftware , Ġand Ġto Ġpermit Ġpersons Ġto Ġwhom Ġthe ĠSoftware Ġis Ċ Ġ* Ġfurnished Ġto Ġdo Ġso , Ġsubject Ġto Ġthe Ġfollowing Ġconditions : Ċ Ġ* Ċ Ġ* ĠThe Ġabove Ġcopyright Ġnotice Ġand Ġthis Ġpermission Ġnotice Ġshall Ġbe Ġincluded Ġin Ġall Ċ Ġ* Ġcopies Ġor Ġsubstantial Ġportions Ġof Ġthe ĠSoftware . Ċ Ġ* Ċ Ġ* ĠTHE ĠSOFTWARE ĠIS ĠPROVIDED Ġ" AS ĠIS ", ĠWITHOUT ĠWARRANTY ĠOF ĠANY ĠKIND , ĠEXPRESS ĠOR Ċ Ġ* ĠIMPLIED , ĠINCLUDING ĠBUT ĠNOT ĠLIMITED ĠTO ĠTHE ĠWARRANTIES ĠOF ĠMERCHANTABILITY , Ċ Ġ* ĠFITNESS ĠFOR ĠA ĠPARTICULAR ĠPURPOSE ĠAND ĠNONINFRINGEMENT . ĠIN ĠNO ĠEVENT ĠSHALL ĠTHE Ċ Ġ* ĠAUTHORS ĠOR ĠCOPYRIGHT ĠHOLDERS ĠBE ĠLIABLE ĠFOR ĠANY ĠCLAIM , ĠDAMAGES ĠOR ĠOTHER Ċ Ġ* ĠLIABILITY , ĠWHETHER ĠIN ĠAN ĠACTION ĠOF ĠCONTRACT , ĠTORT ĠOR ĠOTHERWISE , ĠARISING ĠFROM , Ċ Ġ* ĠOUT ĠOF ĠOR ĠIN ĠCONNECTION ĠWITH ĠTHE ĠSOFTWARE ĠOR ĠTHE ĠUSE ĠOR ĠOTHER ĠDEALINGS ĠIN ĠTHE Ċ Ġ* ĠSOFTWARE . Ċ Ġ*/ Ċ Ċ package Ġnet . p wall . json Ċ Ċ import Ġkotlin . properties . ReadOnly Property Ċ import Ġkotlin . reflect . K Property Ċ Ċ /** Ċ Ġ* ĠA Ġdelegate Ġclass Ġto Ġcreate Ġa Ġproperty Ġfrom Ġa ĠJSON Ġstring . Ċ Ġ* Ċ Ġ* Ġ@ constructor Ċ Ġ* Ġ@ param ĠĠ Ġjson ĠĠĠ Ġthe Ġstring Ġto Ġbe Ġparsed Ċ Ġ* Ġ@ param ĠĠ Ġconfig Ġ Ġan Ġoptional Ġ[ JSON Config ] Ġto Ġcustom ise Ġthe Ġconversion Ċ Ġ* Ġ@ param ĠĠ ĠT ĠĠĠĠĠĠ Ġthe Ġtarget Ġtype Ċ Ġ* Ġ@ author Ġ ĠPeter ĠWall Ċ Ġ*/ Ċ class ĠJSON Delegate < out ĠT >( val Ġjson : ĠString , Ġval Ġconfig : ĠJSON Config Ġ= ĠJSON Config . default Config ) Ġ: ĊĠĠĠĠĠĠĠ ĠReadOnly Property < Any ?, ĠT > Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġvalue : ĠAny ? Ġ= ĠUN INITIAL I SED ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠGet Ġthe Ġvalue Ġof Ġthe Ġproperty Ġ- Ġthe Ġfirst Ġtime Ġthrough Ġthis Ġwill Ġparse Ġthe Ġsupplied Ġstring Ġand Ġstore Ġit Ġfor ĊĠĠĠĠ Ġ* Ġsubsequent Ġreferences . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠThis Ġfunction Ġis Ġnot Ġintended Ġto Ġbe Ġthread - Ġor Ġcoroutine - safe , Ġbut Ġif Ġit Ġis Ġused Ġby Ġmultiple Ġprocesses Ġin ĊĠĠĠĠ Ġ* Ġparallel Ġthe Ġworst Ġthat Ġcan Ġhappen Ġ( in Ġvery Ġrare Ġcases ) Ġis Ġthat Ġthe Ġstring Ġwill Ġbe Ġre - parsed Ġun ne cess arily . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param ĠĠ Ġthis Ref ĠĠĠĠ Ġa Ġreference Ġto Ġthe Ġcontaining Ġobject Ġ- Ġnot Ġused ĊĠĠĠĠ Ġ* Ġ@ param ĠĠ Ġproperty ĠĠĠ Ġthe Ġproperty Ġdescriptor Ġ- Ġused Ġto Ġget Ġthe Ġtype ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠ Ġoverride Ġoperator Ġfun ĠgetValue ( this Ref : ĠAny ?, Ġproperty : ĠK Property < *> ): ĠT Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( value Ġ=== ĠUN INITIAL I SED ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Ġ= ĠJSON Auto . parse ( property . returnType , Ġjson , Ġconfig ) ĊĠĠĠĠĠĠĠ Ġreturn Ġvalue Ġas ĠT ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġobject ĠUN INITIAL I SED Ċ Ċ } Ċ