/* Ċ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 2 0 ĠHal cy on ĠMobile . Ċ Ġ* Ġhttps :// www . hal cy on mobile . com Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* Ġ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 Ġcom . hal cy on mobile . error parsing 2 Ċ Ċ import Ġcom . hal cy on mobile . error parsing 2 . internal . Error Parsing Failure Logging Converter Ċ import Ġcom . hal cy on mobile . error parsing 2 . internal . Error Wr apping And Parsing Call Ċ import Ġcom . hal cy on mobile . error parsing 2 . internal . Network Exception To ErrorResponse Converter Adapter Ċ import Ġcom . hal cy on mobile . error parsing 2 . internal . Parsed Error To ErrorResponse Converter Adapter Ċ import Ġcom . hal cy on mobile . error parsing 2 . log gers . Error Parsing Failure Logger Ċ import Ġokhttp 3 . ResponseBody Ċ import Ġretrofit 2 . Call Ċ import Ġretrofit 2 . Call Adapter Ċ import Ġretrofit 2 . Converter Ċ import Ġretrofit 2 . Ret rofit Ċ import Ġjava . lang . reflect . Parameterized Type Ċ import Ġjava . lang . reflect . Type Ċ Ċ /** Ċ Ġ* ĠCall Ġadapter Ġfactory Ġwhich Ġcan Ġbe Ġused Ġto Ġwrap Ġany Ġerror Ġthrown Ġby Ġthe Ġrequest Ġinto Ġa Ċ Ġ* Ġ[ Network Exception ] Ġif Ġthe Ġrequest Ġis Ġannotated Ġwith Ġ[ Wrap Into Network Exception ] Ġor Ġ[ Parsed Error ]. Ċ Ġ* Ċ Ġ* ĠIf Ġ[ Parsed Error ] Ġannotation Ġis Ġused Ġthen Ġthe Ġerror Body Ġwill Ġalso Ġbe Ġparsed Ġinto Ġthe Ġexception . Ċ Ġ* ĠFor Ġthe Ġparsing Ġprocess Ġthe Ġ[ Ret rofit . converter Factories ] Ġare Ġused . Ċ Ġ*/ Ċ class ĠError Wr apping And Parser Call Adapter Factory ( ĊĠĠĠ Ġprivate Ġval Ġerror Response To Exception Converter Factory : ĠError Response To Exception Converter . Factory , ĊĠĠĠ Ġprivate Ġval Ġwork Without Annotation : ĠBoolean Ġ= Ġfalse , ĊĠĠĠ Ġprivate Ġval Ġerror Parsing Failure Logger : ĠError Parsing Failure Logger ? Ġ= Ġnull Ċ ) Ġ: ĠCall Adapter . Factory () Ġ{ ĊĊĠĠĠ Ġconstructor ( ĊĠĠĠĠĠĠĠ Ġnetwork Exception Converter : ĠNetwork Exception Converter Ġ= ĠDummy Network Exception Converter (), ĊĠĠĠĠĠĠĠ Ġwork Without Annotation : ĠBoolean Ġ= Ġfalse , ĊĠĠĠĠĠĠĠ Ġerror Parsing Failure Logger : ĠError Parsing Failure Logger ? Ġ= Ġnull ) Ġ: Ġthis ( ĊĠĠĠĠĠĠĠ Ġerror Response To Exception Converter Factory Ġ= ĠNetwork Exception To ErrorResponse Converter Adapter . Factory ( network Exception Converter ), ĊĠĠĠĠĠĠĠ Ġwork Without Annotation Ġ= Ġwork Without Annotation , ĊĠĠĠĠĠĠĠ Ġerror Parsing Failure Logger Ġ= Ġerror Parsing Failure Logger ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġconstructor ( ĊĠĠĠĠĠĠĠ Ġparsed Error To Exception Converter Factory : ĠParsed Error To Exception Converter . Factory , ĊĠĠĠĠĠĠĠ Ġwork Without Annotation : ĠBoolean Ġ= Ġfalse , ĊĠĠĠĠĠĠĠ Ġerror Parsing Failure Logger : ĠError Parsing Failure Logger ? Ġ= Ġnull ) Ġ: Ġthis ( ĊĠĠĠĠĠĠĠ Ġerror Response To Exception Converter Factory Ġ= ĠParsed Error To ErrorResponse Converter Adapter . Factory ( parsed Error To Exception Converter Factory ), ĊĠĠĠĠĠĠĠ Ġwork Without Annotation Ġ= Ġwork Without Annotation , ĊĠĠĠĠĠĠĠ Ġerror Parsing Failure Logger Ġ= Ġerror Parsing Failure Logger ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠ Ġoverride Ġfun Ġget ( ĊĠĠĠĠĠĠĠ ĠreturnType : ĠType , ĊĠĠĠĠĠĠĠ Ġannotations : ĠArray < Annotation >, ĊĠĠĠĠĠĠĠ Ġretrofit : ĠRet rofit ĊĠĠĠ Ġ): ĠCall Adapter < *, Ġ* >? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġerror Class Ġ= Ġannotations ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. as Sequence () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Is Instance < Parsed Error >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map ( Parsed Error :: value ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit . java Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. first OrNull () ĊĠĠĠĠĠĠĠ Ġval Ġconverter Ġ= Ġerror Class ?. let Ġ{ Ġretrofit . response Body Converter < Any ? >( it , Ġannotations ) Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( converter Ġ== Ġnull Ġ&& Ġannotations . none Ġ{ Ġit Ġis ĠWrap Into Network Exception Ġ} Ġ&& Ġ! work Without Annotation ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġnon Null Converter Ġ= Ġconverter Ġ?: ĠNull Converter () ĊĠĠĠĠĠĠĠ Ġval Ġwrapped Converter Ġ= Ġerror Parsing Failure Logger ?. let Ġ{ ĠError Parsing Failure Logging Converter ( it , Ġnon Null Converter ) Ġ} Ġ?: Ġnon Null Converter ĊĊĠĠĠĠĠĠĠ Ġval Ġraw Type Ġ= Ġget Parameter Upper Bound ( 0 , ĠreturnType Ġas ĠParameter ized Type ) ĊĠĠĠĠĠĠĠ Ġreturn ĠAdapter < Any >( raw Type , Ġerror Response To Exception Converter Factory . create ( raw Type , Ġerror Class , Ġwrapped Converter )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠAdapter < T >( ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġraw Type : ĠType , ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġerror Response To Exception Converter : ĠError Response To Exception Converter < T > ĊĠĠĠ Ġ) Ġ: ĠCall Adapter < T , ĠCall < T >> Ġ{ ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġadapt ( call : ĠCall < T >): ĠCall < T > Ġ= ĠError Wr apping And Parsing Call ( call , Ġerror Response To Exception Converter ) ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġresponse Type (): ĠType Ġ= Ġraw Type ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠFake Ġconverter Ġwhich Ġalways Ġreturns Ġnull . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġclass ĠNull Converter Ġ: ĠConverter < ResponseBody , ĠAny ?> Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġconvert ( value : ĠResponse Body ): ĠAny ? Ġ= Ġnull ĊĠĠĠ Ġ} Ċ }