package Ġcom . example . im ov ie . domain . use case Ċ Ċ import Ġcom . example . im ov ie . data . repository . The Movie Db Repository Ċ import Ġcom . example . im ov ie . domain . model . Movie Details Model Ċ import Ġcom . example . im ov ie . utils . Dispatcher Provider Ċ import Ġcom . example . im ov ie . utils . Network Error Ċ import Ġcom . example . im ov ie . utils . Result Ċ import Ġkotlinx . coroutines . async Ċ import Ġkotlinx . coroutines . with Context Ċ import Ġjavax . inject . Inject Ċ Ċ interface ĠGet Details UseCase Ġ{ ĊĊĠĠĠ Ġsuspend Ġfun Ġget Details ( movie Id : ĠString ): ĠResult < Movie Details Model , ĠNetwork Error > Ċ } Ċ Ċ class ĠGet Details Ġ@ Inject Ġconstructor ( ĊĠĠĠ Ġprivate Ġval Ġthe Movie Db Repository : ĠThe Movie Db Repository , ĊĠĠĠ Ġprivate Ġval Ġdispatcher Provider : ĠDispatcher Provider Ċ ) Ġ: ĠGet Details UseCase Ġ{ ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġget Details ( movie Id : ĠString ): ĠResult < Movie Details Model , ĠNetwork Error > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwith Context ( dispatcher Provider . io ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmovie Details Ġ= Ġasync Ġ{ Ġthe Movie Db Repository . get Movie Details ( movie Id ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmovie Details Return Ġ= Ġmovie Details . await () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( movie Details Return Ġis ĠResult . Success Ġ&& Ġmovie Details Return . value Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdetails Ġ= Ġmovie Details Return . value ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ with Context ĠResult . Success ( details ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ with Context ĠResult . Error ( Network Error ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ