Skip to content

aster-soc/effekt

Repository files navigation

Effekt

Event and effect system for Kotlin.

Installation

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")
}

Using

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) : Event

You 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")
}

About

Event and effect system for Kotlin

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published