All Downloads are FREE. Search and download functionalities are using the official Maven repository.

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