/* Ċ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 1 9 . Ċ Ġ* Ċ Ġ* ĠThis Ġfile Ġis Ġpart Ġof Ġxml util . Ċ Ġ* Ċ Ġ* ĠThis Ġfile Ġis Ġlic enced Ġto Ġyou Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ċ Ġ* Ġ" License "); Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ċ Ġ* Ġwith Ġthe ĠLicense . Ġ ĠYou Ġshould Ġhave Ġreceived Ġa Ġcopy Ġof Ġthe Ġlicense Ġwith Ġthe Ġsource Ġdistribution . Ċ Ġ* ĠAlternatively , Ġyou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ċ Ġ* Ġsoftware Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ċ Ġ* Ġ" AS ĠIS " ĠBASIS , ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY Ċ Ġ* ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ġ ĠSee Ġthe ĠLicense Ġfor Ġthe Ċ Ġ* Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ġlimitations Ċ Ġ* Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ Ċ package Ġnl . adapt ivity . xml util . serialization Ċ Ċ import Ġkotlinx . serialization .* Ċ import Ġnl . adapt ivity . xml util . Xml Reader Ċ import Ġnl . adapt ivity . xml util . Xml Writer Ċ import Ġnl . adapt ivity . xml util . serialization . XML . Companion . parse Ċ import Ġnl . adapt ivity . xml util . util . Serialization Provider Ċ import Ġkotlin . reflect . K Class Ċ Ċ @ Internal Serialization Api Ċ class ĠKotlin x Serialization Provider Ġ: ĠSerialization Provider Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġ< T Ġ: ĠAny > Ġserializer ( type : ĠK Class < T >): ĠSerialization Provider . Xml Serializer Fun < T >? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġget Serializer ( type )?. let Ġ{ ĠSerializer Fun ( it ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġ< T Ġ: ĠAny > Ġde Serializer ( type : ĠK Class < T >): ĠSerialization Provider . Xml Deserializer Fun ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġget Serializer ( type )?. let Ġ{ ĠDeserial izer Fun ( it ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġclass ĠSerializer Fun < T Ġ: ĠAny >( val Ġserializer : ĠK Serializer < T >) Ġ: ĠSerialization Provider . Xml Serializer Fun < T > Ġ{ ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġinvoke ( output : ĠXml Writer , Ġvalue : ĠT ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠXML (). to Xml ( target Ġ= Ġoutput , Ġserializer Ġ= Ġserializer , Ġvalue Ġ= Ġvalue ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġclass ĠDeserial izer Fun < T Ġ: ĠAny >( val Ġserializer : ĠK Serializer < T >) Ġ: ĠSerialization Provider . Xml Deserializer Fun Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġ< U Ġ: ĠAny > Ġinvoke ( input : ĠXml Reader , Ġtype : ĠK Class < U >): ĠU Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġloader : ĠDeserial ization Strategy < U > Ġ= Ġserializer Ġas ĠK Serializer < U > ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġparse ( input , Ġloader ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġcompanion Ġobject Ġ{ ĊĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġserializers Ġ= Ġmutable Map Of < K Class <* >, ĠK Serializer <* >>() ĊĊĠĠĠĠĠĠĠ Ġ@ Internal Serialization Api ĊĠĠĠĠĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠĠĠĠĠ Ġfun Ġ< T Ġ: ĠAny > Ġget Serializer ( type : ĠK Class < T >): ĠK Serializer < T >? Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġserializers [ type ] Ġas ? ĠK Serializer < T > Ġ?: Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtype . serializer (). also Ġ{ Ġserializers . put ( type , Ġit ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠSerialization Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ } Ċ