/* Ċ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 2 0 ĠV imeo Ġ( https :// v imeo . com ) Ċ Ġ* Ċ Ġ* ĠPermission Ġis Ġhereby Ġgranted , Ġfree Ġof Ġcharge , Ġto Ġany Ġperson Ġobtaining Ġa Ġcopy Ċ Ġ* Ġof Ġthis Ġsoftware Ġand Ġassociated Ġdocumentation Ġfiles Ġ( the Ġ" Software "), Ġto Ġdeal Ċ Ġ* Ġin Ġthe ĠSoftware Ġwithout Ġrestriction , Ġincluding Ġwithout Ġlimitation Ġthe Ġrights Ċ Ġ* Ġto Ġuse , Ġcopy , Ġmodify , Ġmerge , Ġpublish , Ġdistribute , Ġsublicense , Ġand / or Ġsell Ċ Ġ* Ġcopies Ġof Ġthe ĠSoftware , Ġand Ġto Ġpermit Ġpersons Ġto Ġwhom Ġthe ĠSoftware Ġis Ċ Ġ* Ġfurnished Ġto Ġdo Ġso , Ġsubject Ġto Ġthe Ġfollowing Ġconditions : Ċ Ġ* Ċ Ġ* ĠThe Ġabove Ġcopyright Ġnotice Ġand Ġthis Ġpermission Ġnotice Ġshall Ġbe Ġincluded Ġin Ġall Ċ Ġ* Ġcopies Ġor Ġsubstantial Ġportions Ġof Ġthe ĠSoftware . Ċ Ġ* Ċ Ġ* ĠTHE ĠSOFTWARE ĠIS ĠPROVIDED Ġ" AS ĠIS ", ĠWITHOUT ĠWARRANTY ĠOF ĠANY ĠKIND , ĠEXPRESS ĠOR Ċ Ġ* ĠIMPLIED , ĠINCLUDING ĠBUT ĠNOT ĠLIMITED ĠTO ĠTHE ĠWARRANTIES ĠOF ĠMERCHANTABILITY , Ċ Ġ* ĠFITNESS ĠFOR ĠA ĠPARTICULAR ĠPURPOSE ĠAND ĠNONINFRINGEMENT . ĠIN ĠNO ĠEVENT ĠSHALL ĠTHE Ċ Ġ* ĠAUTHORS ĠOR ĠCOPYRIGHT ĠHOLDERS ĠBE ĠLIABLE ĠFOR ĠANY ĠCLAIM , ĠDAMAGES ĠOR ĠOTHER Ċ Ġ* ĠLIABILITY , ĠWHETHER ĠIN ĠAN ĠACTION ĠOF ĠCONTRACT , ĠTORT ĠOR ĠOTHERWISE , ĠARISING ĠFROM , Ċ Ġ* ĠOUT ĠOF ĠOR ĠIN ĠCONNECTION ĠWITH ĠTHE ĠSOFTWARE ĠOR ĠTHE ĠUSE ĠOR ĠOTHER ĠDEALINGS ĠIN ĠTHE Ċ Ġ* ĠSOFTWARE . Ċ Ġ*/ Ċ package Ġcom . v imeo . networking 2 . internal Ċ Ċ import Ġcom . v imeo . networking 2 . ApiError Ċ import Ġcom . v imeo . networking 2 . logging . V imeo Logger Ċ import Ġretrofit 2 . Call Adapter Ċ import Ġretrofit 2 . Ret rofit Ċ import Ġjava . lang . reflect . Parameterized Type Ċ import Ġjava . lang . reflect . Type Ċ import Ġjava . util . concurrent . Executor Ċ Ċ /** Ċ Ġ* ĠFactory Ġfor Ġcreating Ġa Ġcustom Ġ[ Error Handling Call Adapter ]. Ċ Ġ* Ċ Ġ* Ġ@ param Ġv imeo Logger ĠThe Ġlogger Ġused Ġto Ġlog Ġinformation Ġabout Ġerror Ġhandling . Ċ Ġ*/ Ċ internal Ġclass ĠError Handling Call Adapter Factory ( private Ġval Ġv imeo Logger : ĠV imeo Logger ) Ġ: ĠCall Adapter . Factory () Ġ{ ĊĊĠĠĠ Ġoverride Ġfun Ġget ( ĊĠĠĠĠĠĠĠ ĠreturnType : ĠType , ĊĠĠĠĠĠĠĠ Ġannotations : ĠArray < Annotation >, ĊĠĠĠĠĠĠĠ Ġretrofit : ĠRet rofit ĊĠĠĠ Ġ): ĠCall Adapter < *, Ġ* >? Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( getRaw Type ( returnType ) Ġ!= ĠV imeo Call :: class . java ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġcheck ( returnType Ġis ĠParameter ized Type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" V imeo Call Ġmust Ġhave Ġgeneric Ġtype Ġ( e . g ., ĠV imeo Call < ResponseBody > )" ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġresponse Type Ġ= Ġget Parameter Upper Bound ( 0 , ĠreturnType ) ĊĠĠĠĠĠĠĠ Ġval Ġcallback Executor Ġ= Ġretrofit . callback Executor () ĊĠĠĠĠĠĠĠ Ġval Ġerror Response Converter Ġ= Ġretrofit . response Body Converter < ApiError >( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠApi Error :: class . java , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġempty Array () ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( response Type Ġ== ĠUnit :: class . java ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠRequests Ġwith Ġan Ġexpected Ġempty Ġresponse Ġneed Ġto Ġbe Ġhandled Ġdifferently , Ġas Ġempty Ġresponses Ġare Ġotherwise ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġtreated Ġas Ġerrors . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠError Handling Unit Call Adapter ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcallback Executor Ġ?: Ġsynchronous Executor , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġerror Response Converter , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġv imeo Logger ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn ĠError Handling Call Adapter < Any >( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresponse Type , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcallback Executor Ġ?: Ġsynchronous Executor , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġerror Response Converter , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġv imeo Logger ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠIf Ġno Ġexecutor Ġis Ġprovided , Ġwe Ġwill Ġexecute Ġrun n ables Ġsynchronous ly . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġsynchronous Executor Ġ= ĠExecutor Ġ{ Ġit . run () Ġ} ĊĠĠĠ Ġ} Ċ } Ċ