Skip to content

Instantly share code, notes, and snippets.

@linean
Created April 13, 2022 17:17
Show Gist options
  • Save linean/3a0ca4746754357895097230d8eb5231 to your computer and use it in GitHub Desktop.
Save linean/3a0ca4746754357895097230d8eb5231 to your computer and use it in GitHub Desktop.
private class StateReducerFlowImpl<STATE, EVENT>(
initialState: STATE,
reduceState: (STATE, EVENT) -> STATE,
scope: CoroutineScope
) : StateReducerFlow<STATE, EVENT> {
private val events = Channel<EVENT>()
private val stateFlow = events
.receiveAsFlow()
.runningFold(initialState, reduceState)
.stateIn(scope, Eagerly, initialState)
override val replayCache get() = stateFlow.replayCache
override val value get() = stateFlow.value
override suspend fun collect(collector: FlowCollector<STATE>): Nothing {
stateFlow.collect(collector)
}
override fun handleEvent(event: EVENT) {
events.trySend(event)
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment