/* Ċ Ġ* ĠCopyright Ġ( C ) Ġ 2 0 1 7 Ġ- Ġ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 . Link Headers Ċ import Ġkotlinx . coroutines . experimental . suspend C ancellable Coroutine Ċ import Ġretrofit 2 . Call Ċ import Ġretrofit 2 . Response Ċ Ċ /** Ċ Ġ* ĠAwait s Ġa Ġsingle ĠAPI Ġcall Ġand Ġreturns Ġthe Ġresult . Ċ Ġ* Ċ Ġ* Ġ@ param Ġmanager Call ĠBlock Ġin Ġwhich Ġthe ĠAPI Ġcall Ġshould Ġbe Ġstarted Ġusing Ġthe Ġprovided Ġ[ Status Callback ] Ċ Ġ* Ġ@ throws ĠStatus Callback Error Ġif Ġthere Ġwas Ġan ĠAPI Ġerror Ċ Ġ*/ Ċ suspend Ġfun Ġ< T > Ġawait Api ( manager Call : ĠManager Call < T >): ĠT Ġ{ ĊĠĠĠ Ġval Ġorigin StackTrace Ġ= ĠThread . currentThread (). stack Trace ĊĠĠĠ Ġreturn Ġsuspend C ancellable Coroutine Ġ{ Ġcontinuation Ġ-> ĊĠĠĠĠĠĠĠ Ġval Ġcallback Ġ= Ġobject Ġ: ĠStatus Callback < T >() Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġsucceeded Or Failed Ġ= Ġfalse ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Response ( response : ĠResponse < T >, Ġlink Headers : ĠLink Headers , Ġtype : ĠApi Type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsucceeded Or Failed Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( response . is Successful ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontinuation . resume S af ely ( response . body () Ġas ĠT ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontinuation . resume S af ely With Exception ( Status Callback Error ( response Ġ= Ġresponse ), Ġorigin StackTrace ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Finished ( type : ĠApi Type ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! succeeded Or Failed Ġ&& Ġtype Ġ!= ĠApi Type . CACHE ) Ġcontinuation . resume S af ely With Exception ( Status Callback Error ( error Ġ= ĠThrowable (" Status Callback : Ġ 5 0 4 ĠError ")), Ġorigin StackTrace ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Fail ( call : ĠCall < T > ?, Ġerror : ĠThrowable , Ġresponse : ĠResponse < *> ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsucceeded Or Failed Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontinuation . resume S af ely With Exception ( Status Callback Error ( call , Ġerror , Ġresponse ), Ġorigin StackTrace ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġcontinuation . invoke On Completion ({ Ġif Ġ( continu ation . is Cancelled ) Ġcallback . cancel () Ġ}, Ġtrue ) ĊĠĠĠĠĠĠĠ Ġmanager Call ( callback ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠAwait s Ġa Ġsingle ĠAPI Ġcall Ġand Ġreturns Ġthe Ġresulting Ġ[ Response ]. ĠUse Ġthis Ġwhen Ġyou Ġneed Ġto Ġobtain Ġresponse Ġdata Ġin Ċ Ġ* Ġaddition Ġto Ġthe Ġpayload , Ġsuch Ġas Ġthe Ġstatus Ġcode Ġor Ġresponse Ġheaders . Ċ Ġ* Ċ Ġ* Ġ@ param Ġmanager Call ĠBlock Ġin Ġwhich Ġthe ĠAPI Ġcall Ġshould Ġbe Ġstarted Ġusing Ġthe Ġprovided Ġ[ Status Callback ] Ċ Ġ* Ġ@ throws ĠStatus Callback Error Ġif Ġthere Ġwas Ġan ĠAPI Ġerror Ċ Ġ*/ Ċ suspend Ġfun Ġ< T > Ġawait ApiResponse ( manager Call : ĠManager Call < T >): ĠResponse < T > Ġ{ ĊĠĠĠ Ġreturn Ġsuspend C ancellable Coroutine Ġ{ Ġcontinuation Ġ-> ĊĠĠĠĠĠĠĠ Ġval Ġcallback Ġ= Ġobject Ġ: ĠStatus Callback < T >() Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġsucceeded Or Failed Ġ= Ġfalse ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Response ( response : ĠResponse < T >, Ġlink Headers : ĠLink Headers , Ġtype : ĠApi Type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsucceeded Or Failed Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontinuation . resume S af ely ( response ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Finished ( type : ĠApi Type ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! succeeded Or Failed Ġ&& Ġtype Ġ!= ĠApi Type . CACHE ) Ġcontinuation . resume S af ely With Exception ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠStatus Callback Error ( error Ġ= ĠThrowable (" Status Callback : Ġ 5 0 4 ĠError ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Fail ( call : ĠCall < T > ?, Ġerror : ĠThrowable , Ġresponse : ĠResponse < *> ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsucceeded Or Failed Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontinuation . resume S af ely With Exception ( Status Callback Error ( call , Ġerror , Ġresponse )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġcontinuation . invoke On Completion ({ Ġif Ġ( continu ation . is Cancelled ) Ġcallback . cancel () Ġ}, Ġtrue ) ĊĠĠĠĠĠĠĠ Ġmanager Call ( callback ) ĊĠĠĠ Ġ} Ċ } Ċ