micro_utils.dokka
0.15.1

# DefaultUpdatableStatesMachine

open class DefaultUpdatableStatesMachine<T : State>(statesManager: StatesManager<T>, handlers: List<CheckableHandlerHolder<in T, T>>, onStateHandlingErrorHandler: StateHandlingErrorHandler<T> = defaultStateHandlingErrorHandler()) : DefaultStatesMachine<T> , UpdatableStatesMachine<T>

## Constructors

DefaultUpdatableStatesMachine
Link copied to clipboard
fun <T : State> DefaultUpdatableStatesMachine(statesManager: StatesManager<T>, handlers: List<CheckableHandlerHolder<in T, T>>, onStateHandlingErrorHandler: StateHandlingErrorHandler<T> = defaultStateHandlingErrorHandler())

## Functions

handleState
Link copied to clipboard
open suspend override fun StatesMachine<in T>.handleState(state: T): T?

Will call launchStateHandling for state handling

launchStateHandling
Link copied to clipboard
open suspend override fun launchStateHandling(state: T, handlers: List<CheckableHandlerHolder<in T, T>>): T?
open suspend fun launchStateHandling(state: T, handlers: List<CheckableHandlerHolder<in T, T>>, onStateHandlingErrorHandler: StateHandlingErrorHandler<T>): T?
performStateUpdate
Link copied to clipboard
open suspend override fun performStateUpdate(previousState: Optional<T>, actualState: T, scope: CoroutineScope)

Realization of this update will use the Job of previousState in statesJobs and jobsStates if previousState is Optional.presented and shouldReplaceJob has returned true for previousState and actualState. In other words, Job of previousState WILL NOT be replaced with the new one if they are "equal". Equality of states is solved in shouldReplaceJob and can be rewritten in subclasses

start
Link copied to clipboard
open override fun start(scope: CoroutineScope): Job

Launch handling of states. On statesManager, statesManager will be called lambda with performing of state. If launchStateHandling will returns some State then statesManager will be used, otherwise StatesManager.endChain.

startChain
Link copied to clipboard
open suspend override fun startChain(state: T)

Just calls StatesManager.startChain of statesManager

updateChain
Link copied to clipboard
open suspend override fun updateChain(currentState: T, newState: T)

Update chain with current state equal to currentState with newState. Behaviour of this update preforming in cases when currentState does not exist in StatesManager must be declared inside of realization of StatesManager.update function

## Extensions

holder
Link copied to clipboard
inline fun <I : O, O : State> StatesHandler<I, O>.holder(strict: Boolean = true): CustomizableHandlerHolder<O, O>
inline fun <I : O, O : State> StatesHandler<I, O>.holder(noinline filter: suspend (state: State) -> Boolean): CustomizableHandlerHolder<O, O>