package Ġtech . jor ge cast ro . json api . adapter Ċ Ċ import Ġcom . squareup . mos hi . M oshi Ċ import Ġcom . squareup . mos hi . kotlin . reflect . Kotlin Json Adapter Factory Ċ import Ġokhttp 3 . Request Ċ import Ġok io . Timeout Ċ import Ġorg . json . JSONObject Ċ import Ġretrofit 2 . Call Ċ import Ġretrofit 2 . Callback Ċ import Ġretrofit 2 . Response Ċ import Ġtech . jor ge cast ro . json api . Json ApiError Ċ import Ġtech . jor ge cast ro . json api . exception . Json ApiResponse Exception Ċ Ċ class ĠJson Api Ret rofit Call Adapter < T >( val Ġcall : ĠCall < T >): ĠCall < T > Ġ{ ĊĠĠĠ Ġ@ Throws ( Exception :: class ) ĊĠĠĠ Ġoverride Ġfun Ġenqueue ( callback : ĠCallback < T >) Ġ{ ĊĠĠĠĠĠĠĠ Ġcall . enqueue ( object Ġ: ĠCallback < T > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Failure ( call : ĠCall < T >, Ġt : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcallback . on Failure ( call , Ġt ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Throws ( Exception :: class ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Response ( call : ĠCall < T >, Ġresponse : ĠResponse < T >) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġm oshi Ġ= ĠM oshi . Builder (). add ( Kotlin Json Adapter Factory ()). build () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġhttp Code Ġ= Ġresponse . code () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( http Code Ġin Ġ 4 0 0 .. 4 9 9 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠjsonObject Ġ= ĠJSONObject ( response . error Body ()?. string ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġjson ApiError Ġ= Ġm oshi . adapter ( Json ApiError :: class . java ). fromJson ( jsonObject . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġjson ApiError ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcallback . on Failure ( call , ĠJson ApiResponse Exception ( message Ġ= Ġresponse . message (), Ġdata Ġ= Ġjson ApiError )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcallback . on Response ( call , Ġresponse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġis Executed () Ġ= Ġcall . is Executed ĊĊĠĠĠ Ġoverride Ġfun Ġclone (): ĠCall < T > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġcall . clone () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġis Canceled () Ġ= Ġcall . is Canceled ĊĊĠĠĠ Ġoverride Ġfun Ġcancel () Ġ{ ĊĠĠĠĠĠĠĠ Ġcall . cancel () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġexecute (): ĠResponse < T > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġcall . execute () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġrequest (): ĠRequest Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġcall . request () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġtimeout (): ĠTimeout Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġcall . timeout () ĊĠĠĠ Ġ} Ċ } Ċ