Event and effect system for Kotlin.
Effekt can be installed from the remlit.site releases repository.
repositories {
mavenCentral()
maven {
url = uri("https://repo.remlit.site/releases")
}
}
dependencies {
implementation("site.remlit:effekt:0.1.4")
}To create an event, you can implement the Event interface. You can choose to add parameters that can be use in effects.
class MessageEvent(val message: String) : EventYou can create an effect of this event which prints the message.
effect<MessageEvent> { event ->
println("Received message ${event.message}")
}You can also set priority of events. The higher the priority, the sooner the effect executes when an event is called.
// Runs first
effect<MessageEvent>(EffectPriority.High) { event ->
println("Received message ${event.message}")
}
// Runs last
effect<MessageEvent>(EffectPriority.Low) { event ->
println("Received message ${event.message} again")
}When an event is interruptable, you can prevent the remaining effects from running from within an effect.
class MessageEvent(val message: String) : InterruptableEvent
effect<MessageEvent>(EffectPriority.High) { event ->
println("Received message ${event.message}")
event.interrupt()
}
// Never runs
effect<MessageEvent>(EffectPriority.Low) { event ->
println("Received message ${event.message} again")
}