package Ġ{{ Ġcook iecutter . package _ name Ġ}} . data . network Ċ Ċ import Ġ{{ Ġcook iecutter . package _ name Ġ}} . utils . ApiException Ċ import Ġ{{ Ġcook iecutter . package _ name Ġ}} . data . models . Custom Result Ċ import Ġ{{ Ġcook iecutter . package _ name Ġ}} . utils . Un Authorized Exception Ċ import Ġ{{ Ġcook iecutter . package _ name Ġ}} . utils . localized Exception Ċ import Ġorg . json . JSONObject Ċ import Ġretrofit 2 . Response Ċ Ċ abstract Ġclass ĠSafe ApiRequest Ġ{ ĊĊĠĠĠ Ġsuspend Ġfun Ġ< T Ġ: ĠAny > Ġapi Request ( call : Ġsuspend Ġ() Ġ-> ĠResponse < T >): ĠCustom Result < T > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= Ġcall . invoke () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( response . is Successful ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCustom Result . Success ( response . body () !! ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCustom Result . Error ( response . get ApiException (). localized Exception ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCustom Result . Error ( e . localized Exception ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// TODO : Ġdelete Ġis Ġnot Ġin Ġuse ĊĠĠĠ Ġ@ Throws ( Exception :: class ) ĊĠĠĠ Ġsuspend Ġfun Ġ< T Ġ: ĠAny > Ġapi Request With Exception ( call : Ġsuspend Ġ() Ġ-> ĠResponse < T >): ĠT Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= Ġcall . invoke () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( response . is Successful ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresponse . body () !! ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow Ġresponse . get ApiException () ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow Ġe . localized Exception ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Throws ( Exception :: class ) ĊĠĠĠ Ġfun Ġ< T Ġ: ĠAny > ĠResponse < T >. get ApiException (): ĠException Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġerror Ġ= Ġerror Body ()?. string () ĊĠĠĠĠĠĠĠ Ġval Ġerror Obj Ġ= ĠJSONObject ( error Ġ?: Ġ"{} ") ĊĠĠĠĠĠĠĠ Ġif Ġ( error Obj . getInt (" code ") Ġ== Ġ 4 0 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠUn Authorized Exception () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn ĠApiException ( error Obj . getJSONObject (" error "). get JSONArray (" message "). getString ( 0 )) ĊĠĠĠ Ġ} Ċ } Ċ