/* Ċ Ġ* ĠDesign ed Ġand Ġdeveloped Ġby Ġ 2 0 2 0 Ġw z asd Ġ( J eff rey Ġw ang ) Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ Ċ @ file : Suppress (" unused ") Ċ @ file : Jvm Name (" Response Transformer ") Ċ @ file : Jvm Mult if ile Class Ċ Ċ package Ġcom . fo unic y . module . gin Ċ Ċ import Ġandroidx . lifecycle . LiveData Ċ import Ġandroidx . lifecycle . Mutable LiveData Ċ import Ġcom . fo unic y . module . gin . coroutines . Sus pension Function Ċ import Ġcom . fo unic y . module . gin . operators . ApiResponse Operator Ċ import Ġcom . fo unic y . module . gin . operators . ApiResponse Suspend Operator Ċ import Ġkotlinx . coroutines . Coroutine Scope Ċ import Ġkotlinx . coroutines . Job Ċ import Ġkotlinx . coroutines . Supervisor Job Ċ import Ġkotlinx . coroutines . flow . Flow Ċ import Ġkotlinx . coroutines . flow . empty Flow Ċ import Ġkotlinx . coroutines . flow . flow Of Ċ import Ġkotlinx . coroutines . launch Ċ import Ġokhttp 3 . Headers Ċ import Ġretrofit 2 . Call Ċ import Ġretrofit 2 . Callback Ċ import Ġretrofit 2 . Response Ċ import Ġkotlin . coroutines . Coroutine Context Ċ import Ġkotlin . coroutines . Empty Coroutine Context Ċ Ċ /** Ċ Ġ* Ċ Ġ* ĠRequests Ġasynchronously Ġand Ġexecutes Ġthe Ġlambda Ġthat Ġreceives Ġ[ ApiResponse ] Ġas Ġa Ġresult . Ċ Ġ* Ċ Ġ* Ġ@ param Ġon Result ĠAn Ġlambda Ġthat Ġreceives Ġ[ ApiResponse ] Ġas Ġa Ġresult . Ċ Ġ* Ċ Ġ* Ġ@ return ĠThe Ġoriginal Ġ[ Call ]. Ċ Ġ*/ Ċ @ Jvm Synt hetic Ċ public Ġinline Ġfun Ġ< T > ĠCall < T >. request ( ĊĠ Ġcross inline Ġon Result : Ġ( response : ĠApiResponse < T >) Ġ-> ĠUnit Ċ ): ĠCall < T > Ġ= Ġapply Ġ{ ĊĠ Ġenqueue ( get Callback From On Result ( on Result )) Ċ } Ċ Ċ /** ĊĊ Ġ* Ċ Ġ* ĠCombin es Ġa Ġ[ Data Response ] Ġto Ġthe Ġcall Ġfor Ġprocessing Ġresponse Ġdata Ġmore Ġhandy . Ċ Ġ*/ Ċ @ Jvm Synt hetic Ċ public Ġinline Ġfun Ġ< T > ĠCall < T >. combine DataSource ( ĊĠ ĠdataSource : ĠData Response < T >, ĊĠ Ġcross inline Ġon Result : Ġ( response : ĠApiResponse < T >) Ġ-> ĠUnit Ċ ): ĠData Response < T > Ġ= ĠdataSource . combine ( this , Ġget Callback From On Result ( on Result )) Ċ Ċ /** ĊĊ Ġ* Ċ Ġ* ĠCombin es Ġa Ġ[ Data Response ] Ġto Ġthe Ġcall Ġfor Ġprocessing Ġresponse Ġdata Ġmore Ġhandy . Ċ Ġ*/ Ċ @ Jvm Synt hetic Ċ @ Sus pension Function Ċ public Ġinline Ġfun Ġ< T > ĠCall < T >. suspend Combine DataSource ( ĊĠ ĠdataSource : ĠData Response < T >, ĊĠ Ġcoroutine Scope : ĠCor outine Scope , ĊĠ Ġcross inline Ġon Result : Ġsuspend Ġ( response : ĠApiResponse < T >) Ġ-> ĠUnit Ċ ): ĠData Response < T > Ġ= ĠdataSource . combine ( this , Ġget Callback From On Result On Cor outines Scope ( coroutine Scope , Ġon Result )) Ċ Ċ /** ĊĊ Ġ* Ċ Ġ* ĠCombin es Ġa Ġ[ Data Response ] Ġto Ġthe Ġcall Ġfor Ġprocessing Ġresponse Ġdata Ġmore Ġhandy . Ċ Ġ*/ Ċ @ Jvm Synt hetic Ċ @ Sus pension Function Ċ public Ġinline Ġfun Ġ< T > ĠCall < T >. suspend Combine DataSource ( ĊĠ ĠdataSource : ĠData Response < T >, ĊĠ Ġcontext : ĠCor outine Context Ġ= ĠEmpty Coroutine Context , ĊĠ Ġcross inline Ġon Result : Ġsuspend Ġ( response : ĠApiResponse < T >) Ġ-> ĠUnit Ċ ): ĠData Response < T > Ġ= ĠdataSource . combine ( this , Ġget Callback From On Result WithContext ( context , Ġon Result )) Ċ Ċ /** ĊĊ Ġ* Ċ Ġ* ĠReturns Ġa Ġresponse Ġcallback Ġfrom Ġan Ġon Result Ġlambda . Ċ Ġ* Ċ Ġ* Ġ@ param Ġon Result ĠA Ġlambda Ġthat Ġwould Ġbe Ġexecuted Ġwhen Ġthe Ġrequest Ġfinished . Ċ Ġ* Ċ Ġ* Ġ@ return ĠA Ġ[ Callback ] Ġwill Ġbe Ġexecuted . Ċ Ġ*/ Ċ @ Published Api Ċ @ Jvm Synt hetic Ċ internal Ġinline Ġfun Ġ< T > Ġget Callback From On Result ( ĊĠ Ġcross inline Ġon Result : Ġ( response : ĠApiResponse < T >) Ġ-> ĠUnit Ċ ): ĠCallback < T > Ġ{ ĊĠ Ġreturn Ġobject Ġ: ĠCallback < T > Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġon Response ( call : ĠCall < T >, Ġresponse : ĠResponse < T >) Ġ{ ĊĠĠĠĠĠ Ġon Result ( ApiResponse . of Ġ{ Ġresponse Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Failure ( call : ĠCall < T >, Ġthrowable : ĠThrowable ) Ġ{ ĊĠĠĠĠĠ Ġon Result ( ApiResponse . error ( throwable )) ĊĠĠĠ Ġ} ĊĠ Ġ} Ċ } Ċ Ċ /** ĊĊ Ġ* Ċ Ġ* ĠReturns Ġa Ġresponse Ġcallback Ġfrom Ġan Ġon Result Ġlambda . Ċ Ġ* Ċ Ġ* Ġ@ param Ġon Result ĠA Ġlambda Ġthat Ġwould Ġbe Ġexecuted Ġwhen Ġthe Ġrequest Ġfinished . Ċ Ġ* Ċ Ġ* Ġ@ return ĠA Ġ[ Callback ] Ġwill Ġbe Ġexecuted . Ċ Ġ*/ Ċ @ Published Api Ċ @ Jvm Synt hetic Ċ internal Ġinline Ġfun Ġ< T > Ġget Callback From On Result On Cor outines Scope ( ĊĠ Ġcoroutine Scope : ĠCor outine Scope , ĊĠ Ġcross inline Ġon Result : Ġsuspend Ġ( response : ĠApiResponse < T >) Ġ-> ĠUnit Ċ ): ĠCallback < T > Ġ{ ĊĠ Ġreturn Ġobject Ġ: ĠCallback < T > Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġon Response ( call : ĠCall < T >, Ġresponse : ĠResponse < T >) Ġ{ ĊĠĠĠĠĠ Ġcoroutine Scope . launch Ġ{ ĊĠĠĠĠĠĠĠ Ġon Result ( ApiResponse . of Ġ{ Ġresponse Ġ}) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Failure ( call : ĠCall < T >, Ġthrowable : ĠThrowable ) Ġ{ ĊĠĠĠĠĠ Ġcoroutine Scope . launch Ġ{ ĊĠĠĠĠĠĠĠ Ġon Result ( ApiResponse . error ( throwable )) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} Ċ } Ċ Ċ /** ĊĊ Ġ* Ċ Ġ* ĠReturns Ġa Ġresponse Ġcallback Ġfrom Ġan Ġon Result Ġlambda . Ċ Ġ* Ċ Ġ* Ġ@ param Ġon Result ĠA Ġlambda Ġthat Ġwould Ġbe Ġexecuted Ġwhen Ġthe Ġrequest Ġfinished . Ċ Ġ* Ċ Ġ* Ġ@ return ĠA Ġ[ Callback ] Ġwill Ġbe Ġexecuted . Ċ Ġ*/ Ċ @ Published Api Ċ @ Jvm Synt hetic Ċ internal Ġinline Ġfun Ġ< T > Ġget Callback From On Result WithContext ( ĊĠ Ġcontext : ĠCor outine Context Ġ= ĠEmpty Coroutine Context , ĊĠ Ġcross inline Ġon Result : Ġsuspend Ġ( response : ĠApiResponse < T >) Ġ-> ĠUnit Ċ ): ĠCallback < T > Ġ{ ĊĠ Ġreturn Ġobject Ġ: ĠCallback < T > Ġ{ ĊĠĠĠ Ġval Ġsupervisor Job Ġ= ĠSuper visor Job ( context [ Job ]) ĊĠĠĠ Ġval Ġscope Ġ= ĠCor outine Scope ( context Ġ+ Ġsupervisor Job ) ĊĠĠĠ Ġoverride Ġfun Ġon Response ( call : ĠCall < T >, Ġresponse : ĠResponse < T >) Ġ{ ĊĠĠĠĠĠ Ġscope . launch Ġ{ ĊĠĠĠĠĠĠĠ Ġon Result ( ApiResponse . of Ġ{ Ġresponse Ġ}) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Failure ( call : ĠCall < T >, Ġthrowable : ĠThrowable ) Ġ{ ĊĠĠĠĠĠ Ġscope . launch Ġ{ ĊĠĠĠĠĠĠĠ Ġon Result ( ApiResponse . error ( throwable )) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} Ċ } Ċ Ċ /** ĊĊ Ġ* Ċ Ġ* ĠReturns Ġthe Ġencaps ulated Ġdata Ġif Ġthis Ġinstance Ġrepresents Ġ[ ApiResponse . Success ] Ġor Ċ Ġ* Ġreturns Ġnull Ġif Ġit Ġis Ġ[ ApiResponse . Failure . Error ] Ġor Ġ[ ApiResponse . Failure . Exception ]. Ċ Ġ* Ċ Ġ* Ġ@ return ĠThe Ġencaps ulated Ġdata Ġor Ġnull . Ċ Ġ*/ Ċ public Ġfun Ġ< T > ĠApiResponse < T >. get OrNull (): ĠT ? Ġ{ ĊĠ Ġreturn Ġwhen Ġ( this ) Ġ{ ĊĠĠĠ Ġis ĠApiResponse . Success Ġ-> Ġdata ĊĠĠĠ Ġis ĠApiResponse . Failure . Error Ġ-> Ġnull ĊĠĠĠ Ġis ĠApiResponse . Failure . Exception Ġ-> Ġnull ĊĠ Ġ} Ċ } Ċ Ċ /** ĊĊ Ġ* Ċ Ġ* ĠReturns Ġthe Ġencaps ulated Ġdata Ġif Ġthis Ġinstance Ġrepresents Ġ[ ApiResponse . Success ] Ġor Ċ Ġ* Ġreturns Ġthe Ġ[ defaultValue ] Ġif Ġit Ġis Ġ[ ApiResponse . Failure . Error ] Ġor Ġ[ ApiResponse . Failure . Exception ]. Ċ Ġ* Ċ Ġ* Ġ@ return ĠThe Ġencaps ulated Ġdata Ġor Ġ[ defaultValue ]. Ċ Ġ*/ Ċ public Ġfun Ġ< T > ĠApiResponse < T >. getOrElse ( defaultValue : ĠT ): ĠT Ġ{ ĊĠ Ġreturn Ġwhen Ġ( this ) Ġ{ ĊĠĠĠ Ġis ĠApiResponse . Success Ġ-> Ġdata ĊĠĠĠ Ġis ĠApiResponse . Failure . Error Ġ-> ĠdefaultValue ĊĠĠĠ Ġis ĠApiResponse . Failure . Exception Ġ-> ĠdefaultValue ĊĠ Ġ} Ċ } Ċ Ċ /** ĊĊ Ġ* Ċ Ġ* ĠReturns Ġthe Ġencaps ulated Ġdata Ġif Ġthis Ġinstance Ġrepresents Ġ[ ApiResponse . Success ] Ġor Ċ Ġ* Ġinvokes Ġthe Ġlambda Ġ[ defaultValue ] Ġthat Ġreturns Ġ[ T ] Ġif Ġit Ġis Ġ[ ApiResponse . Failure . Error ] Ġor Ġ[ ApiResponse . Failure . Exception ]. Ċ Ġ* Ċ Ġ* Ġ@ return ĠThe Ġencaps ulated Ġdata Ġor Ġ[ defaultValue ]. Ċ Ġ*/ Ċ public Ġinline Ġfun Ġ< T > ĠApiResponse < T >. getOrElse ( defaultValue : Ġ() Ġ-> ĠT ): ĠT Ġ{ ĊĠ Ġreturn Ġwhen Ġ( this ) Ġ{ ĊĠĠĠ Ġis ĠApiResponse . Success Ġ-> Ġdata ĊĠĠĠ Ġis ĠApiResponse . Failure . Error Ġ-> ĠdefaultValue () ĊĠĠĠ Ġis ĠApiResponse . Failure . Exception Ġ-> ĠdefaultValue () ĊĠ Ġ} Ċ } Ċ Ċ /** ĊĊ Ġ* Ċ Ġ* ĠReturns Ġthe Ġencaps ulated Ġdata Ġif Ġthis Ġinstance Ġrepresents Ġ[ ApiResponse . Success ] Ġor Ċ Ġ* Ġthrows Ġthe Ġencaps ulated ĠThrowable Ġexception Ġif Ġit Ġis Ġ[ ApiResponse . Failure . Error ] Ġor Ġ[ ApiResponse . Failure . Exception ]. Ċ Ġ* Ċ Ġ* Ġ@ throws ĠRuntimeException Ġif Ġit Ġis Ġ[ ApiResponse . Failure . Error ] Ġor Ċ Ġ* Ġthe Ġencaps ulated ĠThrowable Ġexception Ġif Ġit Ġis Ġ[ ApiResponse . Failure . Exception . exception ] Ċ Ġ* Ċ Ġ* Ġ@ return ĠThe Ġencaps ulated Ġdata . Ċ Ġ*/ Ċ public Ġfun Ġ< T > ĠApiResponse < T >. get OrThrow (): ĠT Ġ{ ĊĠ Ġwhen Ġ( this ) Ġ{ ĊĠĠĠ Ġis ĠApiResponse . Success Ġ-> Ġreturn Ġdata ĊĠĠĠ Ġis ĠApiResponse . Failure . Error Ġ-> Ġthrow ĠRuntimeException ( message ()) ĊĠĠĠ Ġis ĠApiResponse . Failure . Exception Ġ-> Ġthrow Ġexception ĊĠ Ġ} Ċ } Ċ Ċ /** ĊĊ Ġ* Ċ Ġ* ĠA Ġscope Ġfunction Ġthat Ġwould Ġbe Ġexecuted Ġfor Ġhandling Ġsuccessful Ġresponses Ġif Ġthe Ġrequest Ġsucceeds . Ċ Ġ* Ċ Ġ* Ġ@ param Ġon Result ĠThe Ġreceiver Ġfunction Ġthat Ġreceiving Ġ[ ApiResponse . Success ] Ġif Ġthe Ġrequest Ġsucceeds . Ċ Ġ* Ċ Ġ* Ġ@ return ĠThe Ġoriginal Ġ[ ApiResponse ]. Ċ Ġ*/ Ċ @ Jvm Synt hetic Ċ public Ġinline Ġfun Ġ< T > ĠApiResponse < T >. on Success ( ĊĠ Ġcross inline Ġon Result : ĠApiResponse . Success < T >. () Ġ-> ĠUnit Ċ ): ĠApiResponse < T > Ġ{ ĊĠ Ġif Ġ( this Ġis ĠApiResponse . Success ) Ġ{ ĊĠĠĠ Ġon Result ( this ) ĊĠ Ġ} ĊĠ Ġreturn Ġthis Ċ } Ċ Ċ /** ĊĊ Ġ* Ċ Ġ* ĠA Ġscope Ġfunction Ġthat Ġwould Ġbe Ġexecuted Ġfor Ġhandling Ġsuccessful Ġresponses Ġif Ġthe Ġrequest Ġsucceeds Ġwith Ġa Ġ[ Api Success Model Mapper ]. Ċ Ġ* Ċ Ġ* Ġ@ param Ġmapper ĠThe Ġ[ Api Success Model Mapper ] Ġfor Ġmapping Ġ[ ApiResponse . Success ] Ġresponse Ġas Ġa Ġcustom Ġ[ V ] Ġinstance Ġmodel . Ċ Ġ* Ġ@ param Ġon Result ĠThe Ġreceiver Ġfunction Ġthat Ġreceiving Ġ[ ApiResponse . Success ] Ġif Ġthe Ġrequest Ġsucceeds . Ċ Ġ* Ċ Ġ* Ġ@ return ĠThe Ġoriginal Ġ[ ApiResponse ]. Ċ Ġ*/ Ċ @ Jvm Synt hetic Ċ public Ġinline Ġfun Ġ< T , ĠV > ĠApiResponse < T >. on Success ( ĊĠ Ġmapper : ĠApi Success Model Mapper < T , ĠV >, ĊĠ Ġcross inline Ġon Result : ĠV . () Ġ-> ĠUnit Ċ ): ĠApiResponse < T > Ġ{ ĊĠ Ġif Ġ( this Ġis ĠApiResponse . Success ) Ġ{ ĊĠĠĠ Ġon Result ( map ( mapper )) ĊĠ Ġ} ĊĠ Ġreturn Ġthis Ċ } Ċ Ċ /** ĊĊ Ġ* Ċ Ġ* ĠA Ġsus pension Ġscope Ġfunction Ġthat Ġwould Ġbe Ġexecuted Ġfor Ġhandling Ġsuccessful Ġresponses Ġif Ġthe Ġrequest Ġsucceeds . Ċ Ġ* Ċ Ġ* Ġ@ param Ġon Result ĠThe Ġreceiver Ġfunction Ġthat Ġreceiving Ġ[ ApiResponse . Success ] Ġif Ġthe Ġrequest Ġsucceeds . Ċ Ġ* Ċ Ġ* Ġ@ return ĠThe Ġoriginal Ġ[ ApiResponse ]. Ċ Ġ*/ Ċ @ Jvm Synt hetic Ċ @ Sus pension Function Ċ public Ġsuspend Ġinline Ġfun Ġ< T > ĠApiResponse < T >. suspend On Success ( ĊĠ Ġcross inline Ġon Result : Ġsuspend ĠApiResponse . Success < T >. () Ġ-> ĠUnit Ċ ): ĠApiResponse < T > Ġ{ ĊĠ Ġif Ġ( this Ġis ĠApiResponse . Success ) Ġ{ ĊĠĠĠ Ġon Result ( this ) ĊĠ Ġ} ĊĠ Ġreturn Ġthis Ċ } Ċ Ċ /** ĊĊ Ġ* Ċ Ġ* ĠA Ġsus pension Ġscope Ġfunction Ġthat Ġwould Ġbe Ġexecuted Ġfor Ġhandling Ġsuccessful Ġresponses Ġif Ġthe Ġrequest Ġsucceeds Ġwith Ġa Ġ[ Api Success Model Mapper ]. Ċ Ġ* Ċ Ġ* Ġ@ param Ġmapper ĠThe Ġ[ Api Success Model Mapper ] Ġfor Ġmapping Ġ[ ApiResponse . Success ] Ġresponse Ġas Ġa Ġcustom Ġ[ V ] Ġinstance Ġmodel . Ċ Ġ* Ġ@ param Ġon Result ĠThe Ġreceiver Ġfunction Ġthat Ġreceiving Ġ[ ApiResponse . Success ] Ġif Ġthe Ġrequest Ġsucceeds . Ċ Ġ* Ċ Ġ* Ġ@ return ĠThe Ġoriginal Ġ[ ApiResponse ]. Ċ Ġ*/ Ċ @ Jvm Synt hetic Ċ @ Sus pension Function Ċ public Ġsuspend Ġinline Ġfun Ġ< T , ĠV > ĠApiResponse < T >. suspend On Success ( ĊĠ Ġmapper : ĠApi Success Model Mapper < T , ĠV >, ĊĠ Ġcross inline Ġon Result : Ġsuspend ĠV . () Ġ-> ĠUnit Ċ ): ĠApiResponse < T > Ġ{ ĊĠ Ġif Ġ( this Ġis ĠApiResponse . Success ) Ġ{ ĊĠĠĠ Ġon Result ( map ( mapper )) ĊĠ Ġ} ĊĠ Ġreturn Ġthis Ċ } Ċ Ċ /** ĊĊ Ġ* Ċ Ġ* ĠA Ġfunction Ġthat Ġwould Ġbe Ġexecuted Ġfor Ġhandling Ġerror Ġresponses Ġif Ġthe Ġrequest Ġfailed Ġor Ġget Ġan Ġexception . Ċ Ġ* Ċ Ġ* Ġ@ param Ġon Result ĠThe Ġreceiver Ġfunction Ġthat Ġreceiving Ġ[ ApiResponse . Failure ] Ġif Ġthe Ġrequest Ġfailed Ġor Ġget Ġan Ġexception . Ċ Ġ* Ċ Ġ* Ġ@ return ĠThe Ġoriginal Ġ[ ApiResponse ]. Ċ Ġ*/ Ċ @ Jvm Synt hetic Ċ public Ġinline Ġfun Ġ< T > ĠApiResponse < T >. on Failure ( ĊĠ Ġcross inline Ġon Result : ĠApiResponse . Failure <* >. () Ġ-> ĠUnit Ċ ): ĠApiResponse < T > Ġ{ ĊĠ Ġif Ġ( this Ġis ĠApiResponse . Failure <* >) Ġ{ ĊĠĠĠ Ġon Result ( this ) ĊĠ Ġ} ĊĠ Ġreturn Ġthis Ċ } Ċ Ċ /** ĊĊ Ġ* Ċ Ġ* ĠA Ġsus pension Ġfunction Ġthat Ġwould Ġbe Ġexecuted Ġfor Ġhandling Ġerror Ġresponses Ġif Ġthe Ġrequest Ġfailed Ġor Ġget Ġan Ġexception . Ċ Ġ* Ċ Ġ* Ġ@ param Ġon Result ĠThe Ġreceiver Ġfunction Ġthat Ġreceiving Ġ[ ApiResponse . Failure ] Ġif Ġthe Ġrequest Ġfailed Ġor Ġget Ġan Ġexception . Ċ Ġ* Ċ Ġ* Ġ@ return ĠThe Ġoriginal Ġ[ ApiResponse ]. Ċ Ġ*/ Ċ @ Jvm Synt hetic Ċ @ Sus pension Function Ċ public Ġsuspend Ġinline Ġfun Ġ< T > ĠApiResponse < T >. suspend On Failure ( ĊĠ Ġcross inline Ġon Result : Ġsuspend ĠApiResponse . Failure <* >. () Ġ-> ĠUnit Ċ ): ĠApiResponse < T > Ġ{ ĊĠ Ġif Ġ( this Ġis ĠApiResponse . Failure <* >) Ġ{ ĊĠĠĠ Ġon Result ( this ) ĊĠ Ġ} ĊĠ Ġreturn Ġthis Ċ } Ċ Ċ /** ĊĊ Ġ* Ċ Ġ* ĠA Ġscope Ġfunction Ġthat Ġwould Ġbe Ġexecuted Ġfor Ġhandling Ġerror Ġresponses Ġif Ġthe Ġrequest Ġfailed . Ċ Ġ* Ċ Ġ* Ġ@ param Ġon Result ĠThe Ġreceiver Ġfunction Ġthat Ġreceiving Ġ[ ApiResponse . Failure . Exception ] Ġif Ġthe Ġrequest Ġfailed . Ċ Ġ* Ċ Ġ* Ġ@ return ĠThe Ġoriginal Ġ[ ApiResponse ]. Ċ Ġ*/ Ċ @ Jvm Synt hetic Ċ public Ġinline Ġfun Ġ< T > ĠApiResponse < T >. onError ( ĊĠ Ġcross inline Ġon Result : ĠApiResponse . Failure . Error < T >. () Ġ-> ĠUnit Ċ ): ĠApiResponse < T > Ġ{ ĊĠ Ġif Ġ( this Ġis ĠApiResponse . Failure . Error ) Ġ{ ĊĠĠĠ Ġon Result ( this ) ĊĠ Ġ} ĊĠ Ġreturn Ġthis Ċ } Ċ Ċ /** ĊĊ Ġ* Ċ Ġ* ĠA Ġscope Ġfunction Ġthat Ġwould Ġbe Ġexecuted Ġfor Ġhandling Ġerror Ġresponses Ġif Ġthe Ġrequest Ġfailed Ġwith Ġa Ġ[ ApiError Model Mapper ]. Ċ Ġ* ĠThis Ġfunction Ġreceives Ġa Ġ[ ApiError Model Mapper ] Ġand Ġreturns Ġthe Ġmapped Ġresult Ġinto Ġthe Ġscope . Ċ Ġ* Ċ Ġ* Ġ@ param Ġmapper ĠThe Ġ[ ApiError Model Mapper ] Ġfor Ġmapping Ġ[ ApiResponse . Failure . Error ] Ġresponse Ġas Ġa Ġcustom Ġ[ V ] Ġinstance Ġmodel . Ċ Ġ* Ġ@ param Ġon Result ĠThe Ġreceiver Ġfunction Ġthat Ġreceiving Ġ[ ApiResponse . Failure . Exception ] Ġif Ġthe Ġrequest Ġfailed . Ċ Ġ* Ċ Ġ* Ġ@ return ĠThe Ġoriginal Ġ[ ApiResponse ]. Ċ Ġ*/ Ċ @ Jvm Synt hetic Ċ public Ġinline Ġfun Ġ< T , ĠV > ĠApiResponse < T >. onError ( ĊĠ Ġmapper : ĠApi Error Model Mapper < V >, ĊĠ Ġcross inline Ġon Result : ĠV . () Ġ-> ĠUnit Ċ ): ĠApiResponse < T > Ġ{ ĊĠ Ġif Ġ( this Ġis ĠApiResponse . Failure . Error ) Ġ{ ĊĠĠĠ Ġon Result ( map ( mapper )) ĊĠ Ġ} ĊĠ Ġreturn Ġthis Ċ } Ċ Ċ /** ĊĊ Ġ* Ċ Ġ* ĠA Ġsus pension Ġscope Ġfunction Ġthat Ġwould Ġbe Ġexecuted Ġfor Ġhandling Ġerror Ġresponses Ġif Ġthe Ġrequest Ġfailed . Ċ Ġ* Ċ Ġ* Ġ@ param Ġon Result ĠThe Ġreceiver Ġfunction Ġthat Ġreceiving Ġ[ ApiResponse . Failure . Exception ] Ġif Ġthe Ġrequest Ġfailed . Ċ Ġ* Ċ Ġ* Ġ@ return ĠThe Ġoriginal Ġ[ ApiResponse ]. Ċ Ġ*/ Ċ @ Jvm Synt hetic Ċ @ Sus pension Function Ċ public Ġsuspend Ġinline Ġfun Ġ< T > ĠApiResponse < T >. suspend OnError ( ĊĠ Ġcross inline Ġon Result : Ġsuspend ĠApiResponse . Failure . Error < T >. () Ġ-> ĠUnit Ċ ): ĠApiResponse < T > Ġ{ ĊĠ Ġif Ġ( this Ġis ĠApiResponse . Failure . Error ) Ġ{ ĊĠĠĠ Ġon Result ( this ) ĊĠ Ġ} ĊĠ Ġreturn Ġthis Ċ } Ċ Ċ /** ĊĊ Ġ* Ċ Ġ* ĠA Ġsus pension Ġscope Ġfunction Ġthat Ġwould Ġbe Ġexecuted Ġfor Ġhandling Ġerror Ġresponses Ġif Ġthe Ġrequest Ġfailed Ġwith Ġa Ġ[ ApiError Model Mapper ]. Ċ Ġ* ĠThis Ġfunction Ġreceives Ġa Ġ[ ApiError Model Mapper ] Ġand Ġreturns Ġthe Ġmapped Ġresult Ġinto Ġthe Ġscope . Ċ Ġ* Ċ Ġ* Ġ@ param Ġmapper ĠThe Ġ[ ApiError Model Mapper ] Ġfor Ġmapping Ġ[ ApiResponse . Failure . Error ] Ġresponse Ġas Ġa Ġcustom Ġ[ V ] Ġinstance Ġmodel . Ċ Ġ* Ġ@ param Ġon Result ĠThe Ġreceiver Ġfunction Ġthat Ġreceiving Ġ[ ApiResponse . Failure . Exception ] Ġif Ġthe Ġrequest Ġfailed . Ċ Ġ* Ċ Ġ* Ġ@ return ĠThe Ġoriginal Ġ[ ApiResponse ]. Ċ Ġ*/ Ċ @ Jvm Synt hetic Ċ @ Sus pension Function Ċ public Ġsuspend Ġinline Ġfun Ġ< T , ĠV > ĠApiResponse < T >. suspend OnError ( ĊĠ Ġmapper : ĠApi Error Model Mapper < V >, ĊĠ Ġcross inline Ġon Result : Ġsuspend ĠV . () Ġ-> ĠUnit Ċ ): ĠApiResponse < T > Ġ{ ĊĠ Ġif Ġ( this Ġis ĠApiResponse . Failure . Error ) Ġ{ ĊĠĠĠ Ġon Result ( map ( mapper )) ĊĠ Ġ} ĊĠ Ġreturn Ġthis Ċ } Ċ Ċ /** ĊĊ Ġ* Ċ Ġ* ĠA Ġscope Ġfunction Ġthat Ġwould Ġbe Ġexecuted Ġfor Ġhandling Ġexception Ġresponses Ġif Ġthe Ġrequest Ġget Ġan Ġexception . Ċ Ġ* Ċ Ġ* Ġ@ param Ġon Result ĠThe Ġreceiver Ġfunction Ġthat Ġreceiving Ġ[ ApiResponse . Failure . Exception ] Ġif Ġthe Ġrequest Ġget Ġan Ġexception . Ċ Ġ* Ċ Ġ* Ġ@ return ĠThe Ġoriginal Ġ[ ApiResponse ]. Ċ Ġ*/ Ċ @ Jvm Synt hetic Ċ public Ġinline Ġfun Ġ< T > ĠApiResponse < T >. on Exception ( ĊĠ Ġcross inline Ġon Result : ĠApiResponse . Failure . Exception < T >. () Ġ-> ĠUnit Ċ ): ĠApiResponse < T > Ġ{ ĊĠ Ġif Ġ( this Ġis ĠApiResponse . Failure . Exception ) Ġ{ ĊĠĠĠ Ġon Result ( this ) ĊĠ Ġ} ĊĠ Ġreturn Ġthis Ċ } Ċ Ċ /** ĊĊ Ġ* Ċ Ġ* ĠA Ġsus pension Ġscope Ġfunction Ġthat Ġwould Ġbe Ġexecuted Ġfor Ġhandling Ġexception Ġresponses Ġif Ġthe Ġrequest Ġget Ġan Ġexception . Ċ Ġ* Ċ Ġ* Ġ@ param Ġon Result ĠThe Ġreceiver Ġfunction Ġthat Ġreceiving Ġ[ ApiResponse . Failure . Exception ] Ġif Ġthe Ġrequest Ġget Ġan Ġexception . Ċ Ġ* Ċ Ġ* Ġ@ return ĠThe Ġoriginal Ġ[ ApiResponse ]. Ċ Ġ*/ Ċ @ Jvm Synt hetic Ċ @ Sus pension Function Ċ public Ġsuspend Ġinline Ġfun Ġ< T > ĠApiResponse < T >. suspend On Exception ( ĊĠ Ġcross inline Ġon Result : Ġsuspend ĠApiResponse . Failure . Exception < T >. () Ġ-> ĠUnit Ċ ): ĠApiResponse < T > Ġ{ ĊĠ Ġif Ġ( this Ġis ĠApiResponse . Failure . Exception ) Ġ{ ĊĠĠĠ Ġon Result ( this ) ĊĠ Ġ} ĊĠ Ġreturn Ġthis Ċ } Ċ Ċ /** ĊĊ Ġ* Ċ Ġ* ĠA Ġscope Ġfunction Ġthat Ġwill Ġbe Ġexecuted Ġfor Ġhandling Ġsuccessful , Ġerror , Ġexception Ġresponses . Ċ Ġ* Ġ ĠThis Ġfunction Ġreceives Ġand Ġhandles Ġ[ ApiResponse . on Success ], Ġ[ ApiResponse . onError ], Ċ Ġ* Ġ Ġand Ġ[ ApiResponse . on Exception ] Ġin Ġone Ġscope . Ċ Ġ* Ċ Ġ* Ġ@ param ĠonSuccess ĠA Ġscope Ġfunction Ġthat Ġwould Ġbe Ġexecuted Ġfor Ġhandling Ġsuccessful Ġresponses Ġif Ġthe Ġrequest Ġsucceeds . Ċ Ġ* Ġ@ param ĠonError ĠA Ġscope Ġfunction Ġthat Ġwould Ġbe Ġexecuted Ġfor Ġhandling Ġerror Ġresponses Ġif Ġthe Ġrequest Ġfailed . Ċ Ġ* Ġ@ param Ġon Exception ĠA Ġscope Ġfunction Ġthat Ġwould Ġbe Ġexecuted Ġfor Ġhandling Ġexception Ġresponses Ġif Ġthe Ġrequest Ġget Ġan Ġexception . Ċ Ġ* Ċ Ġ* Ġ Ġ@ return ĠThe Ġoriginal Ġ[ ApiResponse ]. Ċ Ġ*/ Ċ @ Jvm Synt hetic Ċ public Ġinline Ġfun Ġ< T > ĠApiResponse < T >. on Procedure ( ĊĠ Ġcross inline ĠonSuccess : ĠApiResponse . Success < T >. () Ġ-> ĠUnit , ĊĠ Ġcross inline ĠonError : ĠApiResponse . Failure . Error < T >. () Ġ-> ĠUnit , ĊĠ Ġcross inline Ġon Exception : ĠApiResponse . Failure . Exception < T >. () Ġ-> ĠUnit Ċ ): ĠApiResponse < T > Ġ= Ġapply Ġ{ ĊĠ Ġthis . on Success ( on Success ) ĊĠ Ġthis . onError ( onError ) ĊĠ Ġthis . on Exception ( on Exception ) Ċ } Ċ Ċ /** ĊĊ Ġ* Ċ Ġ* ĠA Ġsus pension Ġscope Ġfunction Ġthat Ġwill Ġbe Ġexecuted Ġfor Ġhandling Ġsuccessful , Ġerror , Ġexception Ġresponses . Ċ Ġ* Ġ ĠThis Ġfunction Ġreceives Ġand Ġhandles Ġ[ ApiResponse . on Success ], Ġ[ ApiResponse . onError ], Ċ Ġ* Ġ Ġand Ġ[ ApiResponse . on Exception ] Ġin Ġone Ġscope . Ċ Ġ* Ċ Ġ* Ġ@ param ĠonSuccess ĠA Ġsus pension Ġscope Ġfunction Ġthat Ġwould Ġbe Ġexecuted Ġfor Ġhandling Ġsuccessful Ġresponses Ġif Ġthe Ġrequest Ġsucceeds . Ċ Ġ* Ġ@ param ĠonError ĠA Ġsus pension Ġscope Ġfunction Ġthat Ġwould Ġbe Ġexecuted Ġfor Ġhandling Ġerror Ġresponses Ġif Ġthe Ġrequest Ġfailed . Ċ Ġ* Ġ@ param Ġon Exception ĠA Ġsus pension Ġscope Ġfunction Ġthat Ġwould Ġbe Ġexecuted Ġfor Ġhandling Ġexception Ġresponses Ġif Ġthe Ġrequest Ġget Ġan Ġexception . Ċ Ġ* Ċ Ġ* Ġ Ġ@ return ĠThe Ġoriginal Ġ[ ApiResponse ]. Ċ Ġ*/ Ċ @ Jvm Synt hetic Ċ @ Sus pension Function Ċ public Ġsuspend Ġinline Ġfun Ġ< T > ĠApiResponse < T >. suspend On Procedure ( ĊĠ Ġcross inline ĠonSuccess : Ġsuspend ĠApiResponse . Success < T >. () Ġ-> ĠUnit , ĊĠ Ġcross inline ĠonError : Ġsuspend ĠApiResponse . Failure . Error < T >. () Ġ-> ĠUnit , ĊĠ Ġcross inline Ġon Exception : Ġsuspend ĠApiResponse . Failure . Exception < T >. () Ġ-> ĠUnit Ċ ): ĠApiResponse < T > Ġ= Ġapply Ġ{ ĊĠ Ġthis . suspend On Success ( on Success ) ĊĠ Ġthis . suspend OnError ( onError ) ĊĠ Ġthis . suspend On Exception ( on Exception ) Ċ } Ċ Ċ /** ĊĊ Ġ* Ċ Ġ* ĠMaps Ġ[ ApiResponse . Success ] Ġto Ġa Ġcustomized Ġsuccess Ġresponse Ġmodel . Ċ Ġ* Ċ Ġ* Ġ@ param Ġmapper ĠA Ġmapper Ġinterface Ġfor Ġmapping Ġ[ ApiResponse . Success ] Ġresponse Ġas Ġa Ġcustom Ġ[ V ] Ġinstance Ġmodel . Ċ Ġ* Ċ Ġ* Ġ@ return ĠA Ġmapped Ġcustom Ġ[ V ] Ġerror Ġresponse Ġmodel . Ċ Ġ*/ Ċ public Ġfun Ġ< T , ĠV > ĠApiResponse . Success < T >. map ( mapper : ĠApi Success Model Mapper < T , ĠV >): ĠV Ġ{ ĊĠ Ġreturn Ġmapper . map ( this ) Ċ } Ċ Ċ /** ĊĊ Ġ* Ċ Ġ* ĠMaps Ġ[ ApiResponse . Success ] Ġto Ġa Ġcustomized Ġsuccess Ġresponse Ġmodel . Ċ Ġ* Ċ Ġ* Ġ@ param Ġmapper ĠAn Ġexecutable Ġlambda Ġfor Ġmapping Ġ[ ApiResponse . Success ] Ġresponse Ġas Ġa Ġcustom Ġ[ V ] Ġinstance Ġmodel . Ċ Ġ* Ċ Ġ* Ġ@ return ĠA Ġmapped Ġcustom Ġ[ V ] Ġerror Ġresponse Ġmodel . Ċ Ġ*/ Ċ public Ġfun Ġ< T , ĠV > ĠApiResponse . Success < T >. map ( mapper : Ġ( ApiResponse . Success < T >) Ġ-> ĠV ): ĠV Ġ{ ĊĠ Ġreturn Ġmapper ( this ) Ċ } Ċ Ċ /** ĊĊ Ġ* Ċ Ġ* ĠMaps Ġ[ ApiResponse . Success ] Ġto Ġa Ġcustomized Ġerror Ġresponse Ġmodel Ġwith Ġa Ġreceiver Ġscope Ġlambda . Ċ Ġ* Ċ Ġ* Ġ@ param Ġmapper ĠA Ġmapper Ġinterface Ġfor Ġmapping Ġ[ ApiResponse . Success ] Ġresponse Ġas Ġa Ġcustom Ġ[ V ] Ġinstance Ġmodel . Ċ Ġ* Ġ@ param Ġon Result ĠA Ġreceiver Ġscope Ġlambda Ġof Ġthe Ġmapped Ġcustom Ġ[ V ] Ġsuccess Ġresponse Ġmodel . Ċ Ġ* Ċ Ġ* Ġ@ return ĠA Ġmapped Ġcustom Ġ[ V ] Ġsuccess Ġresponse Ġmodel . Ċ Ġ*/ Ċ @ Jvm Synt hetic Ċ public Ġinline Ġfun Ġ< T , ĠV > ĠApiResponse . Success < T >. map ( ĊĠ Ġmapper : ĠApi Success Model Mapper < T , ĠV >, ĊĠ Ġcross inline Ġon Result : ĠV . () Ġ-> ĠUnit Ċ ) Ġ{ ĊĠ Ġon Result ( mapper . map ( this )) Ċ } Ċ Ċ /** ĊĊ Ġ* Ċ Ġ* ĠMaps Ġ[ ApiResponse . Success ] Ġto Ġa Ġcustomized Ġerror Ġresponse Ġmodel Ġwith Ġa Ġsus pension Ġreceiver Ġscope Ġlambda . Ċ Ġ* Ċ Ġ* Ġ@ param Ġmapper ĠA Ġmapper Ġinterface Ġfor Ġmapping Ġ[ ApiResponse . Success ] Ġresponse Ġas Ġa Ġcustom Ġ[ V ] Ġinstance Ġmodel . Ċ Ġ* Ġ@ param Ġon Result ĠA Ġsus pension Ġreceiver Ġscope Ġlambda Ġof Ġthe Ġmapped Ġcustom Ġ[ V ] Ġsuccess Ġresponse Ġmodel . Ċ Ġ* Ċ Ġ* Ġ@ return ĠA Ġmapped Ġcustom Ġ[ V ] Ġsuccess Ġresponse Ġmodel . Ċ Ġ*/ Ċ @ Jvm Synt hetic Ċ @ Sus pension Function Ċ public Ġsuspend Ġinline Ġfun Ġ< T , ĠV > ĠApiResponse . Success < T >. suspend Map ( ĊĠ Ġmapper : ĠApi Success Model Mapper < T , ĠV >, ĊĠ Ġcross inline Ġon Result : Ġsuspend ĠV . () Ġ-> ĠUnit Ċ ) Ġ{ ĊĠ Ġon Result ( mapper . map ( this )) Ċ } Ċ Ċ /** ĊĊ Ġ* Ċ Ġ* ĠMaps Ġ[ ApiResponse . Success ] Ġto Ġa Ġcustomized Ġerror Ġresponse Ġmodel Ġwith Ġa Ġsus pension Ġreceiver Ġscope Ġlambda . Ċ Ġ* Ċ Ġ* Ġ@ param Ġmapper ĠAn Ġexecutable Ġlambda Ġfor Ġmapping Ġ[ ApiResponse . Success ] Ġresponse Ġas Ġa Ġcustom Ġ[ V ] Ġinstance Ġmodel . Ċ Ġ* Ċ Ġ* Ġ@ return ĠA Ġmapped Ġcustom Ġ[ V ] Ġsuccess Ġresponse Ġmodel . Ċ Ġ*/ Ċ @ Jvm Synt hetic Ċ @ Sus pension Function Ċ public Ġsuspend Ġinline Ġfun Ġ< T , ĠV > ĠApiResponse . Success < T >. suspend Map ( ĊĠ Ġcross inline Ġmapper : Ġsuspend Ġ( ApiResponse . Success < T >) Ġ-> ĠV Ċ ): ĠV Ġ{ ĊĠ Ġreturn Ġmapper ( this ) Ċ } Ċ Ċ /** ĊĊ Ġ* Ċ Ġ* ĠMaps Ġ[ ApiResponse . Failure . Error ] Ġto Ġa Ġcustomized Ġerror Ġresponse Ġmodel . Ċ Ġ* Ċ Ġ* Ġ@ param Ġmapper ĠA Ġmapper Ġinterface Ġfor Ġmapping Ġ[ ApiResponse . Failure . Error ] Ġresponse Ġas Ġa Ġcustom Ġ[ V ] Ġinstance Ġmodel . Ċ Ġ* Ċ Ġ* Ġ@ return ĠA Ġmapped Ġcustom Ġ[ V ] Ġerror Ġresponse Ġmodel . Ċ Ġ*/ Ċ public Ġfun Ġ< T , ĠV > ĠApiResponse . Failure . Error < T >. map ( mapper : ĠApi Error Model Mapper < V >): ĠV Ġ{ ĊĠ Ġreturn Ġmapper . map ( this ) Ċ } Ċ Ċ /** ĊĊ Ġ* Ċ Ġ* ĠMaps Ġ[ ApiResponse . Failure . Error ] Ġto Ġa Ġcustomized Ġerror Ġresponse Ġmodel . Ċ Ġ* Ċ Ġ* Ġ@ param Ġmapper ĠAn Ġexecutable Ġlambda Ġfor Ġmapping Ġ[ ApiResponse . Failure . Error ] Ġresponse Ġas Ġa Ġcustom Ġ[ V ] Ġinstance Ġmodel . Ċ Ġ* Ċ Ġ* Ġ@ return ĠA Ġmapped Ġcustom Ġ[ V ] Ġerror Ġresponse Ġmodel . Ċ Ġ*/ Ċ public Ġfun Ġ< T , ĠV > ĠApiResponse . Failure . Error < T >. map ( mapper : Ġ( ApiResponse . Failure . Error < T >) Ġ-> ĠV ): ĠV Ġ{ ĊĠ Ġreturn Ġmapper ( this ) Ċ } Ċ Ċ /** ĊĊ Ġ* Ċ Ġ* ĠMaps Ġ[ ApiResponse . Failure . Error ] Ġto Ġa Ġcustomized Ġerror Ġresponse Ġmodel Ġwith Ġa Ġreceiver Ġscope Ġlambda . Ċ Ġ* Ċ Ġ* Ġ@ param Ġmapper ĠA Ġmapper Ġinterface Ġfor Ġmapping Ġ[ ApiResponse . Failure . Error ] Ġresponse Ġas Ġa Ġcustom Ġ[ V ] Ġinstance Ġmodel . Ċ Ġ* Ġ@ param Ġon Result ĠA Ġreceiver Ġscope Ġlambda Ġof Ġthe Ġmapped Ġcustom Ġ[ V ] Ġerror Ġresponse Ġmodel . Ċ Ġ* Ċ Ġ* Ġ@ return ĠA Ġmapped Ġcustom Ġ[ V ] Ġerror Ġresponse Ġmodel . Ċ Ġ*/ Ċ @ Jvm Synt hetic Ċ public Ġinline Ġfun Ġ< T , ĠV > ĠApiResponse . Failure . Error < T >. map ( ĊĠ Ġmapper : ĠApi Error Model Mapper < V >, ĊĠ Ġcross inline Ġon Result : ĠV . () Ġ-> ĠUnit Ċ ) Ġ{ ĊĠ Ġon Result ( mapper . map ( this )) Ċ } Ċ Ċ /** ĊĊ Ġ* Ċ Ġ* ĠMaps Ġ[ ApiResponse . Failure . Error ] Ġto Ġa Ġcustomized Ġerror Ġresponse Ġmodel Ġwith Ġa Ġsus pension Ġreceiver Ġscope Ġlambda . Ċ Ġ* Ċ Ġ* Ġ@ param Ġmapper ĠA Ġmapper Ġinterface Ġfor Ġmapping Ġ[ ApiResponse . Failure . Error ] Ġresponse Ġas Ġa Ġcustom Ġ[ V ] Ġinstance Ġmodel . Ċ Ġ* Ġ@ param Ġon Result ĠA Ġsus pension Ġreceiver Ġscope Ġlambda Ġof Ġthe Ġmapped Ġcustom Ġ[ V ] Ġerror Ġresponse Ġmodel . Ċ Ġ* Ċ Ġ* Ġ@ return ĠA Ġmapped Ġcustom Ġ[ V ] Ġerror Ġresponse Ġmodel . Ċ Ġ*/ Ċ @ Jvm Synt hetic Ċ @ Sus pension Function Ċ public Ġsuspend Ġinline Ġfun Ġ< T , ĠV > ĠApiResponse . Failure . Error < T >. suspend Map ( ĊĠ Ġmapper : ĠApi Error Model Mapper < V >, ĊĠ Ġcross inline Ġon Result : Ġsuspend ĠV . () Ġ-> ĠUnit Ċ ) Ġ{ ĊĠ Ġon Result ( mapper . map ( this )) Ċ } Ċ Ċ /** ĊĊ Ġ* Ċ Ġ* ĠMaps Ġ[ ApiResponse . Failure . Error ] Ġto Ġa Ġcustomized Ġerror Ġresponse Ġmodel Ġwith Ġa Ġsus pension Ġreceiver Ġscope Ġlambda . Ċ Ġ* Ċ Ġ* Ġ@ param Ġmapper ĠA Ġmapper Ġinterface Ġfor Ġmapping Ġ[ ApiResponse . Failure . Error ] Ġresponse Ġas Ġa Ġcustom Ġ[ V ] Ġinstance Ġmodel . Ċ Ġ* Ċ Ġ* Ġ@ return ĠA Ġmapped Ġcustom Ġ[ V ] Ġerror Ġresponse Ġmodel . Ċ Ġ*/ Ċ @ Jvm Synt hetic Ċ @ Sus pension Function Ċ public Ġsuspend Ġinline Ġfun Ġ< T , ĠV > ĠApiResponse . Failure . Error < T >. suspend Map ( ĊĠ Ġcross inline Ġmapper : Ġsuspend Ġ( ApiResponse . Failure . Error < T >) Ġ-> ĠV Ċ ): ĠV Ġ{ ĊĠ Ġreturn Ġmapper ( this ) Ċ } Ċ Ċ /** ĊĊ Ġ* Ċ Ġ* ĠMerge s Ġmultiple Ġ[ ApiResponse ] s Ġas Ġone Ġ[ ApiResponse ] Ġdepending Ġon Ġthe Ġpolicy , Ġ[ ApiResponse Merge Policy ]. Ċ Ġ* ĠThe Ġdefault Ġpolicy Ġis Ġ[ ApiResponse Merge Policy . IGNORE _ FAILURE ]. Ċ Ġ* Ċ Ġ* Ġ@ param Ġresponses ĠResponse s Ġfor Ġmerging Ġas Ġone Ġ[ ApiResponse ]. Ċ Ġ* Ġ@ param Ġmerge Policy ĠA Ġpolicy Ġfor Ġmerging Ġresponse Ġdata Ġdepend Ġon Ġthe Ġsuccess Ġor Ġnot . Ċ Ġ* Ċ Ġ* Ġ@ return Ġ[ ApiResponse ] Ġthat Ġdepends Ġon Ġthe Ġ[ ApiResponse Merge Policy ]. Ċ Ġ*/ Ċ @ Jvm Synt hetic Ċ public Ġfun Ġ< T > ĠApiResponse < List < T >> . merge ( ĊĠ Ġvar arg Ġresponses : ĠApiResponse < List < T >>, ĊĠ Ġmerge Policy : ĠApiResponse Merge Policy Ġ= ĠApiResponse Merge Policy . IGNORE _ FAILURE Ċ ): ĠApiResponse < List < T >> Ġ{ ĊĠ Ġval Ġapi Responses Ġ= Ġresponses . to Mutable List () ĊĠ Ġapi Responses . add ( 0 , Ġthis ) ĊĊĠ Ġvar Ġapi Response : ĠApiResponse . Success < List < T >> Ġ= ĊĠĠĠ ĠApiResponse . Success ( Response . success ( mutable ListOf (), ĠHeaders . headers Of ())) ĊĊĠ Ġval Ġdata : ĠMutable List < T > Ġ= Ġmutable ListOf () ĊĊĠ Ġfor Ġ( response Ġin Ġapi Responses ) Ġ{ ĊĠĠĠ Ġif Ġ( response Ġis ĠApiResponse . Success ) Ġ{ ĊĠĠĠĠĠ Ġdata . addAll ( response . data ) ĊĠĠĠĠĠ Ġapi Response Ġ= ĠApiResponse . Success ( ĊĠĠĠĠĠĠĠ ĠResponse . success ( data , Ġresponse . headers ) ĊĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ġelse Ġif Ġ( merge Policy Ġ=== ĠApiResponse Merge Policy . PREFERRED _ FAILURE ) Ġ{ ĊĠĠĠĠĠ Ġreturn Ġresponse ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġreturn Ġapi Response Ċ } Ċ Ċ /** ĊĊ Ġ* Ċ Ġ* ĠReturns Ġan Ġerror Ġmessage Ġfrom Ġthe Ġ[ ApiResponse . Failure . Error ] Ġthat Ġconsists Ġof Ġthe Ġstatus Ġand Ġerror Ġresponse . Ċ Ġ* Ċ Ġ* Ġ@ return ĠAn Ġerror Ġmessage Ġfrom Ġthe Ġ[ ApiResponse . Failure . Error ]. Ċ Ġ*/ Ċ public Ġfun Ġ< T > ĠApiResponse . Failure . Error < T >. message (): ĠString Ġ= ĠtoString () Ċ Ċ /** Ċ Ġ* ĠReturns Ġan Ġerror Ġmessage Ġfrom Ġthe Ġ[ ApiResponse . Failure . Exception ] Ġthat Ġconsists Ġof Ġthe Ġlocalized Ġmessage . Ċ Ġ* Ċ Ġ* Ġ@ return ĠAn Ġerror Ġmessage Ġfrom Ġthe Ġ[ ApiResponse . Failure . Exception ]. Ċ Ġ*/ Ċ public Ġfun Ġ< T > ĠApiResponse . Failure . Exception < T >. message (): ĠString Ġ= ĠtoString () Ċ Ċ /** ĊĊ Ġ* Ċ Ġ* ĠOper ates Ġon Ġan Ġ[ ApiResponse ] Ġand Ġreturn Ġan Ġ[ ApiResponse ]. Ċ Ġ* ĠThis Ġallows Ġyou Ġto Ġhandle Ġsuccess Ġand Ġerror Ġresponse Ġinstead Ġof Ġthe Ġ[ ApiResponse . on Success ], Ċ Ġ* Ġ[ ApiResponse . onError ], Ġ[ ApiResponse . on Exception ] Ġtransform ers . Ċ Ġ*/ Ċ @ Jvm Synt hetic Ċ public Ġfun Ġ< T , ĠV Ġ: ĠApiResponse Operator < T >> ĠApiResponse < T >. operator ( ĊĠ Ġapi Response Operator : ĠV Ċ ): ĠApiResponse < T > Ġ= Ġapply Ġ{ ĊĠ Ġwhen Ġ( this ) Ġ{ ĊĠĠĠ Ġis ĠApiResponse . Success Ġ-> Ġapi Response Operator . on Success ( this ) ĊĠĠĠ Ġis ĠApiResponse . Failure . Error Ġ-> Ġapi Response Operator . onError ( this ) ĊĠĠĠ Ġis ĠApiResponse . Failure . Exception Ġ-> Ġapi Response Operator . on Exception ( this ) ĊĠ Ġ} Ċ } Ċ Ċ /** ĊĊ Ġ* Ċ Ġ* ĠOper ates Ġon Ġan Ġ[ ApiResponse ] Ġand Ġreturn Ġan Ġ[ ApiResponse ] Ġwhich Ġshould Ġbe Ġhandled Ġin Ġthe Ġsus pension Ġscope . Ċ Ġ* ĠThis Ġallows Ġyou Ġto Ġhandle Ġsuccess Ġand Ġerror Ġresponse Ġinstead Ġof Ġthe Ġ[ ApiResponse . suspend On Success ], Ċ Ġ* Ġ[ ApiResponse . suspend OnError ], Ġ[ ApiResponse . suspend On Exception ] Ġtransform ers . Ċ Ġ*/ Ċ @ Jvm Synt hetic Ċ @ Sus pension Function Ċ public Ġsuspend Ġfun Ġ< T , ĠV Ġ: ĠApiResponse Suspend Operator < T >> ĠApiResponse < T >. suspend Operator ( ĊĠ Ġapi Response Operator : ĠV Ċ ): ĠApiResponse < T > Ġ= Ġapply Ġ{ ĊĠ Ġwhen Ġ( this ) Ġ{ ĊĠĠĠ Ġis ĠApiResponse . Success Ġ-> Ġapi Response Operator . on Success ( this ) ĊĠĠĠ Ġis ĠApiResponse . Failure . Error Ġ-> Ġapi Response Operator . onError ( this ) ĊĠĠĠ Ġis ĠApiResponse . Failure . Exception Ġ-> Ġapi Response Operator . on Exception ( this ) ĊĠ Ġ} Ċ } Ċ Ċ /** ĊĊ Ġ* Ċ Ġ* ĠReturns Ġa Ġ[ LiveData ] Ġwhich Ġcontains Ġsuccessful Ġdata Ġif Ġthe Ġresponse Ġis Ġa Ġ[ ApiResponse . Success ]. Ċ Ġ* Ċ Ġ* Ġ@ return ĠAn Ġobservable Ġ[ LiveData ] Ġwhich Ġcontains Ġsuccessful Ġdata . Ċ Ġ*/ Ċ public Ġfun Ġ< T > ĠApiResponse < T >. to LiveData (): ĠLive Data < T > Ġ{ ĊĠ Ġval Ġlive Data Ġ= ĠMutable LiveData < T >() ĊĠ Ġif Ġ( this Ġis ĠApiResponse . Success ) Ġ{ ĊĠĠĠ Ġlive Data . post Value ( data ) ĊĠ Ġ} ĊĠ Ġreturn Ġlive Data Ċ } Ċ Ċ /** ĊĊ Ġ* Ċ Ġ* ĠReturns Ġa Ġ[ LiveData ] Ġwhich Ġcontains Ġtransformed Ġdata Ġusing Ġsuccessful Ġdata Ġif Ġthe Ġresponse Ġis Ġa Ġ[ ApiResponse . Success ]. Ċ Ġ* Ċ Ġ* Ġ@ param Ġtransformer ĠA Ġtransformer Ġlambda Ġreceives Ġsuccessful Ġdata Ġand Ġreturns Ġanything . Ċ Ġ* Ċ Ġ* Ġ@ return ĠAn Ġobservable Ġ[ LiveData ] Ġwhich Ġcontains Ġsuccessful Ġdata . Ċ Ġ*/ Ċ @ Jvm Synt hetic Ċ public Ġinline Ġfun Ġ< T , ĠR > ĠApiResponse < T >. to LiveData ( ĊĠ Ġcross inline Ġtransformer : ĠT . () Ġ-> ĠR Ċ ): ĠLive Data < R > Ġ{ ĊĠ Ġval Ġlive Data Ġ= ĠMutable LiveData < R >() ĊĠ Ġif Ġ( this Ġis ĠApiResponse . Success ) Ġ{ ĊĠĠĠ Ġlive Data . post Value ( data . transformer ()) ĊĠ Ġ} ĊĠ Ġreturn Ġlive Data Ċ } Ċ Ċ /** ĊĊ Ġ* Ċ Ġ* ĠReturns Ġa Ġ[ LiveData ] Ġwhich Ġcontains Ġtransformed Ġdata Ġusing Ġsuccessful Ġdata Ġif Ġthe Ġresponse Ġis Ġa Ġ[ ApiResponse . Success ]. Ċ Ġ* Ċ Ġ* Ġ@ param Ġtransformer ĠA Ġsus pension Ġtransformer Ġlambda Ġreceives Ġsuccessful Ġdata Ġand Ġreturns Ġanything . Ċ Ġ* Ċ Ġ* Ġ@ return ĠAn Ġobservable Ġ[ LiveData ] Ġwhich Ġcontains Ġsuccessful Ġdata . Ċ Ġ*/ Ċ @ Jvm Synt hetic Ċ @ Sus pension Function Ċ public Ġsuspend Ġinline Ġfun Ġ< T , ĠR > ĠApiResponse < T >. to Suspend LiveData ( ĊĠ Ġcross inline Ġtransformer : Ġsuspend ĠT . () Ġ-> ĠR Ċ ): ĠLive Data < R > Ġ{ ĊĠ Ġval Ġlive Data Ġ= ĠMutable LiveData < R >() ĊĠ Ġif Ġ( this Ġis ĠApiResponse . Success ) Ġ{ ĊĠĠĠ Ġlive Data . post Value ( data . transformer ()) ĊĠ Ġ} ĊĠ Ġreturn Ġlive Data Ċ } Ċ Ċ /** ĊĊ Ġ* Ċ Ġ* ĠReturns Ġa Ġ[ Flow ] Ġwhich Ġemits Ġsuccessful Ġdata Ġif Ġthe Ġresponse Ġis Ġa Ġ[ ApiResponse . Success ] Ġand Ġthe Ġdata Ġis Ġnot Ġnull . Ċ Ġ* Ċ Ġ* Ġ@ return ĠA Ġcor outines Ġ[ Flow ] Ġwhich Ġemits Ġsuccessful Ġdata . Ċ Ġ*/ Ċ @ Jvm Synt hetic Ċ public Ġfun Ġ< T > ĠApiResponse < T >. to Flow (): ĠFlow < T > Ġ{ ĊĠ Ġreturn Ġif Ġ( this Ġis ĠApiResponse . Success ) Ġ{ ĊĠĠĠ Ġflow Of ( data ) ĊĠ Ġ} Ġelse Ġ{ ĊĠĠĠ Ġempty Flow () ĊĠ Ġ} Ċ } Ċ Ċ /** ĊĊ Ġ* Ċ Ġ* ĠReturns Ġa Ġ[ Flow ] Ġwhich Ġcontains Ġtransformed Ġdata Ġusing Ġsuccessful Ġdata Ċ Ġ* Ġif Ġthe Ġresponse Ġis Ġa Ġ[ ApiResponse . Success ] Ġand Ġthe Ġdata Ġis Ġnot Ġnull . Ċ Ġ* Ċ Ġ* Ġ@ param Ġtransformer ĠA Ġtransformer Ġlambda Ġreceives Ġsuccessful Ġdata Ġand Ġreturns Ġanything . Ċ Ġ* Ċ Ġ* Ġ@ return ĠA Ġcor outines Ġ[ Flow ] Ġwhich Ġemits Ġsuccessful Ġdata . Ċ Ġ*/ Ċ @ Jvm Synt hetic Ċ public Ġinline Ġfun Ġ< T , ĠR > ĠApiResponse < T >. to Flow ( ĊĠ Ġcross inline Ġtransformer : ĠT . () Ġ-> ĠR Ċ ): ĠFlow < R > Ġ{ ĊĠ Ġreturn Ġif Ġ( this Ġis ĠApiResponse . Success ) Ġ{ ĊĠĠĠ Ġflow Of ( data . transformer ()) ĊĠ Ġ} Ġelse Ġ{ ĊĠĠĠ Ġempty Flow () ĊĠ Ġ} Ċ } Ċ Ċ /** ĊĊ Ġ* Ċ Ġ* ĠReturns Ġa Ġ[ Flow ] Ġwhich Ġcontains Ġtransformed Ġdata Ġusing Ġsuccessful Ġdata Ċ Ġ* Ġif Ġthe Ġresponse Ġis Ġa Ġ[ ApiResponse . Success ] Ġand Ġthe Ġdata Ġis Ġnot Ġnull . Ċ Ġ* Ċ Ġ* Ġ@ param Ġtransformer ĠA Ġsus pension Ġtransformer Ġlambda Ġreceives Ġsuccessful Ġdata Ġand Ġreturns Ġanything . Ċ Ġ* Ċ Ġ* Ġ@ return ĠA Ġcor outines Ġ[ Flow ] Ġwhich Ġemits Ġsuccessful Ġdata . Ċ Ġ*/ Ċ @ Jvm Synt hetic Ċ @ Sus pension Function Ċ public Ġsuspend Ġinline Ġfun Ġ< T , ĠR > ĠApiResponse < T >. to Suspend Flow ( ĊĠ Ġcross inline Ġtransformer : Ġsuspend ĠT . () Ġ-> ĠR Ċ ): ĠFlow < R > Ġ{ ĊĠ Ġreturn Ġif Ġ( this Ġis ĠApiResponse . Success ) Ġ{ ĊĠĠĠ Ġflow Of ( data . transformer ()) ĊĠ Ġ} Ġelse Ġ{ ĊĠĠĠ Ġempty Flow () ĊĠ Ġ} Ċ } Ċ