package Ġcom . fs development . s ic redit est app . data . repository . network . helpers Ċ Ċ import Ġcom . fs development . s ic redit est app . data . model . common . ErrorResponse Ċ import Ġcom . google . gson . Gson Ċ import Ġcom . google . gson . reflect . Type Token Ċ import Ġkotlinx . coroutines . Coroutine Dispatcher Ċ import Ġkotlinx . coroutines . with Context Ċ import Ġretrofit 2 . HttpException Ċ import Ġjava . io . IOException Ċ Ċ class ĠNetwork Helper ( private Ġval Ġgson : ĠGson ) Ġ{ ĊĊĠĠĠ Ġsuspend Ġfun Ġ< T > Ġsafe Api Call ( ĊĠĠĠĠĠĠĠ Ġdispatcher : ĠCor outine Dispatcher , ĊĠĠĠĠĠĠĠ Ġapi Call : Ġsuspend Ġ() Ġ-> ĠT ĊĠĠĠ Ġ): ĠResult Wrapper < T > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwith Context ( dispatcher ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠResult Wrapper . Success ( api Call . invoke ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( throwable : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( throwable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠIOException Ġ-> ĠResult Wrapper . Error (- 1 ) Ġ// ĠConnection ĠError ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠHttp Exception Ġ-> ĠResult Wrapper . Error ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrowable . code (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconvert Error Body ( throwable ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĠResult Wrapper . Error ( null , Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġconvert Error Body ( throwable : ĠHttp Exception ): ĠError Response ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrowable . response ()?. error Body ()?. char Stream ()?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgson . fromJson ( it , Ġobject Ġ: ĠType Token < ErrorResponse >() Ġ{} . type ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( exception : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠError Response ( throwable . code (), Ġthrowable . response ()?. error Body ()?. string (), Ġnull ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }