package Ġcom . foobar ust . deliver er . use cases Ċ Ċ import Ġcom . foobar ust . deliver er . states . Resource Ċ import Ġkotlinx . coroutines . Coroutine Dispatcher Ċ import Ġkotlinx . coroutines . with Context Ċ Ċ /** Ċ Ġ* ĠCreated Ġby Ġke vin Ġon Ġ 8 / 2 6 / 2 0 Ċ Ġ*/ Ċ Ċ abstract Ġclass ĠCor outine UseCase < in ĠP , ĠR >( ĊĠĠĠ Ġprivate Ġval Ġcoroutine Dispatcher : ĠCor outine Dispatcher Ċ ) Ġ{ ĊĊĠĠĠ Ġsuspend Ġoperator Ġfun Ġinvoke ( parameters : ĠP ): ĠResource < R > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠMoving Ġall Ġuse Ġcase 's Ġexecution s Ġto Ġthe Ġinjected Ġdispatcher ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠIn Ġproduction Ġcode , Ġthis Ġis Ġusually Ġthe ĠDefault Ġdispatcher Ġ( background Ġthread ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠIn Ġtests , Ġthis Ġbecomes Ġa ĠTest Coroutine Dispatcher ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwith Context ( coroutine Dispatcher ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexecute ( parameters ). let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠResource . Success ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠResource . Error ( e . message ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Throws ( RuntimeException :: class ) ĊĠĠĠ Ġprotected Ġabstract Ġsuspend Ġfun Ġexecute ( parameters : ĠP ): ĠR Ċ }