/* Ċ Ġ* ĠCopyright Ġ 2 0 2 0 ĠPaul ĠR y bits ky i , Ġpa ul . ry bits ky i . work @ gmail . 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 . paul ry bits ky i . game d ge . commons . api . call adapter Ċ Ċ import Ġcom . github . m ichael bull . result . Err Ċ import Ġcom . github . m ichael bull . result . Ok Ċ import Ġcom . paul ry bits ky i . game d ge . commons . api . Api Result Ċ import Ġcom . paul ry bits ky i . game d ge . commons . api . ErrorMessage Extractor Ċ import Ġcom . paul ry bits ky i . game d ge . commons . api . enqueue Ċ import Ġokhttp 3 . Request Ċ import Ġokhttp 3 . ResponseBody Ċ import Ġok io . Timeout Ċ import Ġretrofit 2 . Call Ċ import Ġretrofit 2 . Callback Ċ import Ġretrofit 2 . Response Ċ import Ġjava . io . IOException Ċ import Ġjava . lang . reflect . Type Ċ import Ġcom . paul ry bits ky i . game d ge . commons . api . Error Ġas ĠApi Error Ċ Ċ class ĠApi Result Call < T >( ĊĠĠĠ Ġprivate Ġval Ġdelegate : ĠCall < T >, ĊĠĠĠ Ġprivate Ġval Ġsuccess Type : ĠType , ĊĠĠĠ Ġprivate Ġval ĠerrorMessage Extractor : ĠError Message Extractor Ċ ) Ġ: ĠCall < Api Result < T >> Ġ{ ĊĊĊĠĠĠ Ġoverride Ġfun Ġenqueue ( callback : ĠCallback < Api Result < T >>) Ġ{ ĊĠĠĠĠĠĠĠ Ġdelegate . enqueue ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Response Ġ= Ġ{ Ġ_, Ġresponse Ġ-> Ġcallback . on Response ( this , ĠResponse . success ( response . to Api Result ())) Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Failure Ġ= Ġ{ Ġ_, Ġthrowable Ġ-> Ġcallback . on Response ( this , ĠResponse . success ( throwable . to Api Result ())) Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠ Ġprivate Ġfun ĠResponse < T >. to Api Result (): ĠApi Result < T > Ġ{ ĊĠĠĠĠĠĠĠ Ġif (! is Successful ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġhttp Code Ġ= Ġcode () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmessage Ġ= Ġ( error Body ()?. extract ErrorMessage () Ġ?: Ġ"") ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠErr ( ApiError . Http Error ( http Code , Ġmessage )) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġbody ()?. let Ġ{ Ġreturn ĠOk ( it ) Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġif ( success Type Ġ== ĠUnit :: class . java ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( Ok ( Unit ) Ġas ĠApi Result < T >) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠErr ( ApiError . Unknown Error ( IllegalStateException (" The Ġresponse Ġbody Ġwas Ġnull . "))) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġprivate Ġfun ĠResponse Body . extract ErrorMessage (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠerrorMessage Extractor . extract ( string ()) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġprivate Ġfun Ġ< T > ĠThrowable . to Api Result (): ĠApi Result < T > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠErr ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen ( this ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠIOException Ġ-> ĠApi Error . Network Error ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĠApi Error . Unknown Error ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġoverride Ġfun Ġis Executed (): ĠBoolean Ġ= Ġdelegate . is Executed ĊĊĊĠĠĠ Ġoverride Ġfun Ġis Canceled (): ĠBoolean Ġ= Ġdelegate . is Canceled ĊĊĊĠĠĠ Ġoverride Ġfun Ġcancel () Ġ= Ġdelegate . cancel () ĊĊĊĠĠĠ Ġoverride Ġfun Ġrequest (): ĠRequest Ġ= Ġdelegate . request () ĊĊĊĠĠĠ Ġoverride Ġfun Ġtimeout (): ĠTimeout Ġ= Ġdelegate . timeout () ĊĊĊĠĠĠ Ġoverride Ġfun Ġexecute (): ĠResponse < Api Result < T >> Ġ{ ĊĠĠĠĠĠĠĠ Ġthrow ĠUnsupportedOperationException () ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġoverride Ġfun Ġclone (): ĠCall < Api Result < T >> Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠApi Result Call ( delegate . clone (), Ġsuccess Type , ĠerrorMessage Extractor ) ĊĠĠĠ Ġ} ĊĊ Ċ }