/* Ċ Ġ* ĠCopyright Ġ( C ) Ġ 2 0 1 9 Ġ- Ġpresent ĠIn structure , ĠInc . Ċ Ġ* Ċ Ġ* ĠĠĠĠ Ġ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 . Ċ Ġ*/ Ċ @ file : Suppress (" EXPERIMENT AL _ FEATURE _ WARNING ", Ġ" unused ") Ċ Ċ package Ġcom . in structure . canvas api 2 . utils . we ave Ċ Ċ import Ġcom . in structure . canvas api 2 . Status Callback Ċ import Ġcom . in structure . canvas api 2 . utils . Api Type Ċ import Ġcom . in structure . canvas api 2 . utils . Data Result Ċ import Ġcom . in structure . canvas api 2 . utils . Failure Ċ import Ġcom . in structure . canvas api 2 . utils . Link Headers Ċ import Ġkotlinx . coroutines . Comp letable Deferred Ċ import Ġkotlinx . coroutines . Deferred Ċ import Ġretrofit 2 . Call Ċ import Ġretrofit 2 . Response Ċ Ċ /** Ċ Ġ* ĠStarts Ġa Ġsingle ĠAPI Ġcall Ġand Ġreturns Ġits Ġfuture Ġ[ Data Result ] Ġpayload Ġas Ġan Ġimplementation Ġof Ġ[ Deferred ]. Ċ Ġ* Ċ Ġ* ĠThis Ġfunction Ġdoes Ġnot Ġthrow Ġ[ Status Callback Error ]. ĠAny Ġerrors Ġthat Ġoccurred Ġwhile Ġretrieving Ġthe Ġpayload Ċ Ġ* Ġwill Ġreturn Ġas Ġan Ġinstance Ġof Ġ[ Data Result . Fail ]. Ċ Ġ* Ċ Ġ* Ġ@ param Ġmanager Call ĠBlock Ġin Ġwhich Ġthe ĠAPI Ġcall Ġshould Ġbe Ġstarted Ġusing Ġthe Ġprovided Ġ[ Status Callback ] Ċ Ġ*/ Ċ fun Ġ< T > Ġapi Async ( manager Call : ĠManager Call < T >): ĠDeferred < Data Result < T >> Ġ{ ĊĠĠĠ Ġval Ġdeferred Ġ= ĠComp letable Deferred < Data Result < T >>() ĊĊĠĠĠ Ġval Ġcallback Ġ= Ġobject Ġ: ĠStatus Callback < T >() Ġ{ ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Response ( response : ĠResponse < T >, Ġlink Headers : ĠLink Headers , Ġtype : ĠApi Type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdeferred . complete ( Data Result . Success ( response . body () Ġas ĠT )) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Fail ( call : ĠCall < T > ?, Ġerror : ĠThrowable , Ġresponse : ĠResponse < *> ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfailure Ġ= Ġif Ġ( response ?. code () Ġ== Ġ 4 0 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFailure . Authorization ( response . message ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFailure . Network ( response ?. message ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdeferred . complete ( Data Result . Fail ( failure )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġdeferred . invoke On Completion Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( deferred . is Cancelled ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcallback . cancel () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġmanager Call ( callback ) ĊĊĠĠĠ Ġreturn Ġdeferred Ċ } Ċ Ċ /** Ċ Ġ* ĠA Ġconvenience Ġfunction Ġwhich Ġawait s Ġa Ġsuccessful Ġresult Ġand Ġreturns Ġits Ġpayload , Ġor Ġthrows Ġan Ġexception Ċ Ġ* Ġif Ġthe Ġresult Ġis Ġnot Ġsuccessful . Ċ Ġ*/ Ċ suspend Ġfun Ġ< T > ĠDeferred < Data Result < T >> . await OrThrow (): ĠT Ġ{ ĊĠĠĠ Ġval Ġresult Ġ= Ġawait () ĊĠĠĠ Ġif Ġ( result . is Success ) Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġresult . data OrThrow ĊĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠ Ġthrow ĠRuntimeException ( result . toString ()) ĊĠĠĠ Ġ} Ċ } Ċ