package Ġio . fl uk s . core Ċ Ċ import Ġio . fl uk s . base . Effect Ċ import Ġio . reactivex . Observable Source Ċ import Ġio . reactivex . subjects . Behavior Subject Ċ import Ġio . reactivex . subjects . Subject Ċ import Ġkotlin . properties . ReadOnly Property Ċ import Ġkotlin . reflect . K Property Ċ Ċ interface ĠState Holder < State Ġ: ĠAny > Ġ: ĊĠĠĠ ĠReadOnly Property < Any , ĠState >, ĊĠĠĠ ĠObservable Source < Pair < State , ĠEffect >> Ġ{ ĊĊĠĠĠ Ġval Ġname : ĠString ĊĊĠĠĠ Ġfun Ġput ( state : ĠState , Ġevent : ĠEffect ) ĊĊĠĠĠ Ġinterface ĠRepository < State Ġ: ĠAny > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġname : ĠString ĊĠĠĠĠĠĠĠ Ġvar Ġstate : ĠState ? ĊĠĠĠ Ġ} Ċ } Ċ Ċ class ĠSimple State Holder < State Ġ: ĠAny >( ĊĠĠĠ Ġprivate Ġvar Ġstate : ĠState , ĊĠĠĠ Ġprivate Ġval Ġsubject : ĠSubject < Pair < State , ĠEffect >> Ġ= ĠBehavior Subject . create (), ĊĠĠĠ Ġprivate Ġval Ġrepository : ĠState Holder . Repository < State >? Ġ= Ġnull Ċ ) Ġ: ĊĠĠĠ ĠState Holder < State >, ĊĠĠĠ ĠObservable Source < Pair < State , ĠEffect >> Ġby Ġsubject Ġ{ ĊĊĠĠĠ Ġoverride Ġval Ġname : ĠString Ġget () Ġ= Ġrepository ?. name Ġ?: Ġ"" ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġstate Ġ= Ġrepository ?. measure Read () Ġ?: Ġstate ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠgetValue ( this Ref : ĠAny , Ġproperty : ĠK Property < *> ): ĠState Ġ= Ġstate ĊĊĠĠĠ Ġoverride Ġfun Ġput ( state : ĠState , Ġevent : ĠEffect ) Ġ{ ĊĠĠĠĠĠĠĠ Ġrepository ?. measure Write ( state ) ĊĠĠĠĠĠĠĠ Ġthis . state Ġ= Ġstate ĊĠĠĠĠĠĠĠ Ġsubject . onNext ( state Ġto Ġevent ) ĊĠĠĠ Ġ} Ċ }