package Ġcom . catch pig . mv vm . network . converter Ċ Ċ import Ġcom . catch pig . annotation . interfaces . Serialization Converter Ċ import Ġcom . catch pig . mv vm . network . data . I ResponseData Ċ import Ġkotlinx . serialization . K Serializer Ċ import Ġkotlinx . serialization . encode ToString Ċ import Ġkotlinx . serialization . json . Json Element Ċ import Ġkotlinx . serialization . serializer Ċ import Ġokhttp 3 . ResponseBody Ċ import Ġjava . lang . reflect . Parameterized Type Ċ import Ġjava . lang . reflect . Type Ċ import Ġkotlin . reflect . K Class Ċ Ċ open Ġabstract Ġclass ĠBase ResponseBody Converter Ġ: ĊĠĠĠĠĠĠĠ ĠSerialization Converter < ResponseBody , ĠAny > Ġ{ ĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠLIST _ EMPTY Ġ= Ġ" []" ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠMAP _ EMPTY Ġ= Ġ"{} " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠSTRING _ EMPTY Ġ= Ġ"\" \"" ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠNUMBER _ ZERO Ġ= Ġ" 0 " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġlateinit Ġvar Ġtype : ĠType ĊĊĠĠĠ Ġabstract Ġfun Ġget Result Class (): ĠK Class < out ĠI ResponseData < Json Element >> ĊĊĠĠĠ Ġoverride Ġfun Ġconvert ( value : ĠResponse Body ): ĠAny ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġvalue String Ġ= Ġvalue . string () ĊĠĠĠĠĠĠĠ Ġval Ġk Serializer : ĠK Serializer < Any > Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġserializer ( getResult Class (). java ) ĊĠĠĠĠĠĠĠ Ġval Ġresult : ĠI ResponseData < Json Element > Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġjson . decode FromString ( k Serializer , Ġvalue String ) Ġas ĠI ResponseData < Json Element > ĊĠĠĠĠĠĠĠ Ġwhen Ġ( result . get ErrorCode ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult . is Success () Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdata Ġ= Ġresult . data () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( data Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġjson . decode FromString ( serializer ( type ), Ġcheck Type ( type )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġjson . decode FromString ( serializer ( type ), Ġjson . encode ToString ( data )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthrow Ġhandler ErrorCode ( result . get ErrorCode (), Ġresult . get ErrorMessage ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġabstract Ġfun Ġhandler ErrorCode ( errorCode : ĠString , Ġmsg : ĠString ): ĠException ĊĊĠĠĠ Ġprivate Ġfun Ġcheck Type ( type : ĠType ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠParameter ized Type Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( type . raw Type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠList :: class . java Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLIST _ EMPTY ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMAP _ EMPTY ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠString :: class . java Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSTRING _ EMPTY ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠInt :: class . java , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDouble :: class . java , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFloat :: class . java , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLong :: class . java Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠNUMBER _ ZERO ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMAP _ EMPTY ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ