package Ġcc . ek bl ad . toml . trans coding Ċ Ċ import Ġcc . ek bl ad . toml . model . Tom l Exception Ċ import Ġcc . ek bl ad . toml . model . Tom l Value Ċ import Ġcc . ek bl ad . toml . util . Kotlin Name Ċ import Ġcc . ek bl ad . toml . util . Tom l Name Ċ import Ġkotlin . reflect . K Class Ċ import Ġkotlin . reflect . K Property 1 Ċ import Ġkotlin . reflect . K Visibility Ċ import Ġkotlin . reflect . full . declared Member Properties Ċ import Ġkotlin . reflect . jvm . is Accessible Ċ Ċ class ĠTom l Encoder Ġinternal Ġconstructor ( ĊĠĠĠ Ġprivate Ġval Ġen coders : ĠMap < K Class <* >, ĠList < Tom l Encoder .( Any ) Ġ-> ĠTom l Value >>, ĊĠĠĠ Ġprivate Ġval Ġmappings : ĠMap < K Class <* >, ĠMap < Kotlin Name , ĠTom l Name >>, Ċ ) Ġ{ ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThrow n Ġby Ġan Ġencoder Ġfunction Ġto Ġindicate Ġthat Ġit Ġcan 't Ġencode Ġthe Ġgiven Ġvalue , Ġand Ġthat ĊĠĠĠĠ Ġ* Ġthe Ġnext Ġencoder Ġfunction Ġfor Ġthe Ġsource Ġtype Ġshould Ġbe Ġgiven Ġa Ġchance Ġinstead . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġinternal Ġobject ĠPass Ġ: ĠThrowable () ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCalled Ġby Ġan Ġencoder Ġfunction Ġto Ġindicate Ġthat Ġit Ġcan 't Ġencode Ġthe Ġgiven Ġvalue , Ġand Ġthat ĊĠĠĠĠ Ġ* Ġthe Ġnext Ġencoder Ġfunction Ġfor Ġthe Ġsource Ġtype Ġshould Ġbe Ġgiven Ġa Ġchance Ġinstead . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġpass (): ĠNothing Ġ= Ġthrow ĠPass ĊĊĠĠĠ Ġinternal Ġfun Ġmapping For ( type : ĠK Class < *> ): ĠMap < Kotlin Name , ĠTom l Name > Ġ= ĊĠĠĠĠĠĠĠ Ġmappings [ type ] Ġ?: Ġempty Map () ĊĊĠĠĠ Ġinternal Ġfun Ġencoder For ( type : ĠK Class < *> ): Ġ(( Any ) Ġ-> ĠTom l Value )? Ġ= ĊĠĠĠĠĠĠĠ Ġen coders [ type ]?. let Ġ{ Ġen coders ForType Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġencoder @{ Ġvalue Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġen coders ForType . forEach Ġ{ Ġencode Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ encoder Ġthis . encode ( value ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠPass ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ/* Ġno - op Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠPass ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠEncode Ġthe Ġgiven Ġvalue Ġusing Ġthe Ġreceiver Ġencoder . Ċ Ġ*/ Ċ fun ĠTom l Encoder . encode ( value : ĠAny ): ĠTom l Value Ġ{ ĊĠĠĠ Ġencoder For ( value :: class )?. let Ġ{ Ġencode Ġ-> ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ encode Ġencode ( value ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠTom l Encoder . Pass ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ/* Ġno - op Ġ*/ ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġwhen Ġ{ ĊĠĠĠĠĠĠĠ Ġvalue Ġis ĠMap < *, Ġ*> Ġ-> Ġfrom Map ( value ) ĊĠĠĠĠĠĠĠ Ġvalue Ġis ĠIterable < *> Ġ-> ĠTom l Value . List ( value . map NotNull Ġ{ Ġit ?. let (:: encode ) Ġ}) ĊĠĠĠĠĠĠĠ Ġvalue :: class . is Data Ġ-> Ġfrom Data Class ( value ) ĊĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthrow ĠTom l Exception . Encoding Error ( value , Ġnull ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ private Ġfun ĠTom l Encoder . from Map ( value : ĠMap < *, Ġ* >): ĠTom l Value Ġ{ ĊĠĠĠ Ġval Ġentries Ġ= Ġvalue . map NotNull Ġ{ Ġ( key , Ġvalue ) Ġ-> ĊĠĠĠĠĠĠĠ Ġvalue ?. let Ġ{ Ġkey . toString () Ġto Ġencode ( it ) Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn ĠTom l Value . Map ( entries . toMap ()) Ċ } Ċ Ċ private Ġfun ĠTom l Encoder . from Data Class ( value : ĠAny ): ĠTom l Value . Map Ġ{ ĊĠĠĠ Ġval Ġto ml Names By ParameterName Ġ= Ġmapping For ( value :: class ) ĊĠĠĠ Ġval Ġfields Ġ= Ġvalue :: class . declared Member Properties . map NotNull Ġ{ Ġprop Ġ-> ĊĠĠĠĠĠĠĠ Ġif Ġ( value :: class . visibility Ġ== ĠK Visibility . PRIVATE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprop . is Accessible Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠĠĠĠĠ Ġ( prop Ġas ĠK Property 1 < Any , ĠAny ?> ). get ( value )?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġname Ġ= Ġto ml Names By ParameterName [ prop . name ] Ġ?: Ġprop . name ĊĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġto Ġencode ( it ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn ĠTom l Value . Map ( fields . toMap ()) Ċ } Ċ