/* Ċ Ġ* ĠCopyright Ġ 2 0 1 9 Ġthe Ġoriginal Ġauthor Ġor Ġauthors . Ċ Ġ* Ċ Ġ* Ġ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 Ġlaunch 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 (" UN CHECK ED _ CAST ") Ċ Ċ package Ġio . un iflow . core . flow Ċ Ċ import Ġio . un iflow . core . flow . data . UIState Ċ import Ġio . un iflow . core . logger . Uni Flow Logger Ċ import Ġkotlinx . coroutines . Coroutine Scope Ċ Ċ /** Ċ Ġ* ĠUn id irectional ĠData ĠFlow Ċ Ġ* Ċ Ġ* ĠA Ġcomponent Ġthat Ġis Ġable Ġto Ġdeclare Ġnew Ġaction , Ġand Ġdispatch Ġto Ġan Ġinternal Ġreducer Ġprocessor Ċ Ġ* Ċ Ġ* ĠAction Dispatcher Ġ- ĠHave Ġat Ġleast Ġone ĠData Publisher , Ġto Ġpublish ĠState / Event Ġdata Ċ Ġ* Ċ Ġ* ĠonError Ġ- Ġdefault Ġerror Ġhandling Ġbehavior Ġthat Ġcan Ġbe Ġover loaded Ċ Ġ* Ċ Ġ* Ġ@ author ĠAr na ud ĠG i ul ian i Ċ Ġ*/ Ċ interface ĠData Flow Ġ{ ĊĠĠĠ Ġval Ġtag : ĠString ĊĠĠĠ Ġval Ġaction Dispatcher : ĠAction Dispatcher ĊĠĠĠ Ġval Ġcoroutine Scope : ĠCor outine Scope ĊĠĠĠ Ġfun Ġdefault Publisher (): ĠData Publisher ĊĠĠĠ Ġfun Ġaction ( on Action : ĠAction Function ): ĠAction Ġ= Ġaction Dispatcher . dispatch Action ( on Action ) ĊĠĠĠ Ġfun Ġaction ( on Action : ĠAction Function , ĠonError : ĠAction Error Function ): ĠAction Ġ= Ġaction Dispatcher . dispatch Action ( on Action , ĠonError ) ĊĠĠĠ Ġsuspend Ġfun ĠonError ( error : ĠException , Ġcurrent State : ĠUI State ) Ġ{ ĊĠĠĠĠĠĠĠ ĠUni Flow Logger . log Error (" Un caught Ġerror : Ġ$ error Ġ- Ġ${ error . stack Trace }", Ġerror ) ĊĠĠĠĠĠĠĠ Ġthrow Ġerror ĊĠĠĠ Ġ} Ċ } Ċ Ċ inline Ġfun Ġ< re ified ĠT Ġ: ĠUI State > ĠData Flow . action On ( no inline Ġon Action : ĠAction Function _ T < T >): ĠAction Ġ= Ġaction Dispatcher . action On ( T :: class , Ġon Action Ġas ĠAction Function ) Ċ inline Ġfun Ġ< re ified ĠT Ġ: ĠUI State > ĠData Flow . action On ( no inline Ġon Action : ĠAction Function _ T < T >, Ġno inline ĠonError : ĠAction Error Function _ T < T >): ĠAction Ġ= Ġaction Dispatcher . action On ( T :: class , Ġon Action Ġas ĠAction Function , ĠonError Ġas ĠAction Error Function )