/* Ċ Ġ* Ġ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 . internal Ċ Ċ import Ġcom . hal cy on mobile . error parsing . ErrorResponse To Exception Converter Ċ import Ġcom . hal cy on mobile . error parsing . Network Exception Ċ import Ġcom . hal cy on mobile . error parsing . Network Exception Converter Ċ import Ġcom . hal cy on mobile . error parsing . No Network Exception Ċ import Ġokhttp 3 . ResponseBody Ċ import Ġretrofit 2 . Converter Ċ import Ġretrofit 2 . HttpException Ċ import Ġretrofit 2 . Response Ċ import Ġjava . lang . reflect . Type Ċ import Ġjava . net . Unknown Host Exception Ċ Ċ /** Ċ Ġ* ĠAdapter Ġwhich Ġad ap ts Ġa Ġ[ Network Exception Converter ] Ġinto Ġan Ġ[ ErrorResponse To Exception Converter ] Ġso Ġit Ġcan Ġbe Ġused Ġin Ġ[ Error Wr apping And Parsing Call ] Ċ Ġ*/ Ċ internal Ġclass ĠNetwork Exception To ErrorResponse Converter Adapter < T , ĠError >( ĊĠĠĠ Ġprivate Ġval Ġconverter : ĠConverter < ResponseBody , ĠError ? >, ĊĠĠĠ Ġprivate Ġval Ġnetwork Exception Converter : ĠNetwork Exception Converter Ċ ) Ġ: ĠError Response To Exception Converter < T > Ġ{ ĊĊĠĠĠ Ġoverride Ġfun Ġconvert ( response : ĠResponse < T >): ĠRuntimeException Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġ( error Body For Parsing , Ġerror Body AsString ) Ġ= Ġresponse . error Body (). get Copy And String () ĊĠĠĠĠĠĠĠ Ġval Ġnetwork Exception Ġ= ĠNetwork Exception ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrowable Ġ= ĠHttp Exception ( response ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparsed Error Ġ= Ġerror Body For Parsing ?. let Ġ{ Ġconverter . convert S af ely ( it ) Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġerror Body Ġ= Ġerror Body AsString ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġnetwork Exception Converter . convert ( network Exception ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Unknown Host Exception ĊĠĠĠ Ġoverride Ġfun Ġconvert ( throwable : ĠThrowable ): ĠRuntimeException Ġ= ĊĠĠĠĠĠĠĠ Ġnetwork Exception Converter . convert ( throwable . convertTo Network Exception ()) ĊĊĠĠĠ Ġprivate Ġfun ĠThrowable . convertTo Network Exception () Ġ: ĠNetwork Exception = ĊĠĠĠĠĠĠĠ Ġwhen ( this ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠNetwork Exception Ġ-> Ġthis ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠUnknown Host Exception Ġ-> ĠNo Network Exception ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĠNetwork Exception ( throwable Ġ= Ġthis , Ġerror Body Ġ= Ġnull , Ġparsed Error Ġ= Ġnull ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġfun ĠResponse Body ?. get Copy And String (): ĠPair < ResponseBody ?, ĠString ?> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( this Ġ== Ġnull ) Ġreturn Ġnull Ġto Ġnull ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsource Ġ= Ġsource () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsource . request ( Long . MAX _ VALUE ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbuffer Ġ= Ġsource . buffer . clone () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠResponse Body . create ( contentType (), Ġcontent Length (), Ġbuffer ) Ġto Ġstring () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġ< Error > ĠConverter < ResponseBody , ĠError ?> . convert S af ely ( response Body : ĠResponse Body ): ĠAny ? Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconvert ( response Body ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( throwable : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrowable . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠFactory ( private Ġval Ġnetwork Exception Converter : ĠNetwork Exception Converter ) Ġ: ĠError Response To Exception Converter . Factory Ġ{ ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġ< Data , ĠError > Ġcreate ( type : ĠType , Ġerror Class : ĠClass < out ĠAny > ?, Ġconverter : ĠConverter < ResponseBody , ĠError ?> ): ĠError Response To Exception Converter < Data > Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠNetwork Exception To ErrorResponse Converter Adapter ( converter , Ġnetwork Exception Converter ) ĊĊĠĠĠ Ġ} Ċ }