/* Ċ * Ġ ĠCopyright Ġ 2 0 2 1 ĠMat thew ĠN el son Ċ * Ċ * Ġ Ġ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 . Ċ * Ġ*/ Ċ package Ġio . mat the wn el son . android _ feature _ view model Ċ Ċ import Ġio . mat the wn el son . concept _ coroutines . Coroutine Dispatch ers Ċ import Ġio . mat the wn el son . concept _ views . side effect . Side Effect Ċ import Ġio . mat the wn el son . concept _ views . side effect . Side Effect Container Ċ import Ġio . mat the wn el son . concept _ views . side effect . collect Ċ import Ġio . mat the wn el son . concept _ views . view state . ViewState Ċ Ċ suspend Ġinline Ġfun Ġ< T , ĠSE : ĠSide Effect < T >, ĠVS : ĠView State < VS >> ĠSide Effect ViewModel < T , ĠSE , ĠVS >. collect Side Effects ( ĊĠĠĠ Ġcross inline Ġaction : Ġsuspend Ġ( value : ĠSE ) Ġ-> ĠUnit Ċ ): ĠUnit Ġ= ĊĠĠĠ Ġthis . side Effect Container . collect Ġ{ Ġaction ( it ) Ġ} Ċ Ċ suspend Ġinline Ġfun Ġ< T , ĠSE : ĠSide Effect < T >, ĠVS : ĠView State < VS >> ĠSide Effect ViewModel < T , ĠSE , ĠVS >. submit Side Effect ( ĊĠĠĠ Ġside Effect : ĠSE Ċ ) Ġ= ĊĠĠĠ Ġthis . side Effect Container . submit Side Effect ( side Effect ) Ċ Ċ /** Ċ Ġ* ĠAdds Ġ[ Side Effect ] s Ġto Ġthe Ġ[ Base ViewModel ] Ċ Ġ* Ċ Ġ* Ġ@ see Ġ[ Side Effect ] Ċ Ġ* Ġ@ see Ġ[ Side Effect Container ] Ċ Ġ* Ġ*/ Ċ abstract Ġclass ĠSide Effect ViewModel < ĊĠĠĠĠĠĠĠ ĠT , ĊĠĠĠĠĠĠĠ ĠSE : ĠSide Effect < T >, ĊĠĠĠĠĠĠĠ ĠVS : ĠView State < VS > ĊĠĠĠĠĠĠĠ Ġ>( dispatch ers : ĠCor outine Dispatch ers , Ġinitial ViewState : ĠVS ): ĠBase ViewModel < ĊĠĠĠĠĠĠĠ ĠVS ĊĠĠĠĠĠĠĠ Ġ>( dispatch ers , Ġinitial ViewState ) Ċ { ĊĠĠĠ Ġ@ Suppress (" Remove Explicit Type Arguments ") ĊĠĠĠ Ġopen Ġval Ġside Effect Container : ĠSide Effect Container < T , ĠSE > Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ ĠSide Effect Container < T , ĠSE >() ĊĠĠĠ Ġ} Ċ } Ċ