
me.aartikov.sesame.loop.EffectHandler.kt Maven / Gradle / Ivy
package me.aartikov.sesame.loop
/**
* Executes side effects. It also can generate its own actions.
*/
interface EffectHandler {
/**
* [actionConsumer] can be called to emit an action
*/
suspend fun handleEffect(effect: EffectT, actionConsumer: (ActionT) -> Unit)
}
/**
* Handles only side effects of specified subtype.
*/
abstract class SubtypeEffectHandler(
private val subType: Class
) : EffectHandler {
final override suspend fun handleEffect(effect: EffectT, actionConsumer: (ActionT) -> Unit) {
if (subType.isInstance(effect)) {
@Suppress("UNCHECKED_CAST")
handleSubtypeEffect(effect as SubtypeEffectT, actionConsumer)
}
}
abstract suspend fun handleSubtypeEffect(effect: SubtypeEffectT, actionConsumer: (ActionT) -> Unit)
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy