package Ġcom . h iv ian . repository . utils Ċ Ċ import Ġcom . google . gson . annotations . SerializedName Ċ import Ġcom . h iv ian . common . generic . fromJson Ċ import Ġkotlinx . coroutines . Coroutine Dispatcher Ċ import Ġkotlinx . coroutines . with Context Ċ import Ġretrofit 2 . HttpException Ċ Ċ @ Suppress (" unused ") Ċ suspend Ġfun Ġ< T > Ġsafe Api Call ( dispatcher : ĠCor outine Dispatcher , Ġapi Call : Ġsuspend Ġ() Ġ-> ĠT ): ĠNetwork Wrapper Ġ{ ĊĠĠĠ Ġreturn Ġwith Context ( dispatcher ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠNetwork Wrapper . Success (/* api Call . invoke () */ false ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( throwable : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠNetwork Wrapper . Error ( ErrorHandler Impl (). invoke ( throwable )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ Suppress (" unused ") Ċ fun Ġconvert Error Body ( throwable : ĠThrowable ): ĠError Response ? Ġ{ ĊĠĠĠ Ġif Ġ( throwable Ġis ĠHttp Exception ) Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrowable . response ()?. error Body ()?. string (). toString (). run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfrom Json < ErrorResponse >( this ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( exception : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠ Ġthrowable . message ?. run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠError Response ( this ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠ Ġ} Ċ } Ċ Ċ data Ġclass ĠError Response ( ĊĠĠĠ Ġ@ SerializedName (" error _ description ") ĊĠĠĠ Ġval Ġerror Description : ĠString Ġ// Ġthis Ġis Ġthe Ġtranslated Ġerror Ġshown Ġto Ġthe Ġuser Ġdirectly Ġfrom Ġthe ĠAPI ĊĠĠĠ Ġ// val Ġcauses : ĠList < String > Ġ= Ġempty List () Ġ// this Ġis Ġfor Ġerrors Ġon Ġspecific Ġfield Ġon Ġa Ġform Ċ )