package Ġgithub . inform ram iz . com . android api integration . model . repositories . utils Ċ Ċ import Ġgithub . inform ram iz . com . android api integration . common . is No Internet Exception Ċ import Ġgithub . inform ram iz . com . android api integration . common . is Un Authorized Exception Ċ import Ġokhttp 3 . Headers Ċ import Ġretrofit 2 . HttpException Ċ import Ġretrofit 2 . Response Ċ Ċ /** Ċ Ġ* ĠCreated Ġby ĠRam iz ĠR aja Ġon Ġ 2 0 1 9 - 0 7 - 2 3 Ċ Ġ*/ Ċ sealed Ġclass ĠApiResponse < T > Ġ{ ĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġ< T > Ġcreate ( throwable : ĠThrowable ): ĠApi ErrorResponse < T > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠApi ErrorResponse ( throwable . message ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġ" Unknown Ġerror ", Ġthrowable ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġ< T > Ġcreate ( ret rofit Response : ĠResponse < T >): ĠApiResponse < T > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( ret rofit Response . is Successful ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġhttp Code Ġ= Ġretrofit Response . code () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresponse Body Ġ= Ġretrofit Response . body () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( http Code Ġ== Ġ 2 0 4 Ġ|| Ġresponse Body Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠApi Empty Response ( ret rofit Response . headers ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠApi Success Response ( response Body , Ġretrofit Response . headers ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġerror Body Ġ= Ġretrofit Response . error Body ()?. string () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġerror Msg Ġ= Ġif Ġ( error Body . isNull OrEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġretrofit Response . message () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġerror Body ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠApi ErrorResponse ( error Msg ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġ" Unknown Ġerror ", ĠHttp Exception ( ret rofit Response ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ // special Ġclass Ġto Ġrepresent Ġempty ĠApiResponse Ġ( body Ġis Ġnull Ġor Ġhttp Ġ 2 0 4 Ġ( no Ġcontent )) Ċ class ĠApi Empty Response < T >( val Ġheaders : ĠHeaders ?) Ġ: ĠApiResponse < T >() Ċ Ċ // special Ġclass Ġto Ġhandle Ġerror Ġresponse Ċ class ĠApi ErrorResponse < T >( ĊĠĠĠ Ġval ĠerrorMessage : ĠString , ĊĠĠĠ Ġval Ġexception : ĠThrowable ? Ġ= Ġnull ) Ġ: ĠApiResponse < T >() Ġ{ ĊĠĠĠ Ġfun Ġis No Internet Error (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġexception ?. is No Internet Exception () Ġ?: Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġis Un Authorized Error () Ġ= Ġexception ?. is Un Authorized Exception () Ġ?: Ġfalse Ċ } Ċ Ċ // class Ġto Ġhandle Ġsuccessful ĠAPI Ġresponse Ġbody Ċ class ĠApi Success Response < T >( val Ġbody : ĠT , Ġval Ġheaders : ĠHeaders ?) Ġ: ĠApiResponse < T >() Ċ Ċ fun Ġ< T > ĠApiResponse < T >. is Success () Ġ= Ġthis Ġ! is ĠApi ErrorResponse