Multiplatform (JVM, JS) Kotlin DSL for FSM (finite state machine)
stateMachine(initial = MyState.NOT_LOANED) {
state(MyState.NOT_LOANED) {
edge<MyEvent.PressRental>(MyState.LOCK)
}
state(MyState.ON_LOAN, entry = { /* LED ON */ }, exit = { /* LED OFF */ }) {
state(MyState.LOCK) {
edge<MyEvent.PressUnLock>(MyState.UNLOCK)
edge<MyEvent.PressLock>(MyState.NOT_LOANED, guard = { it.isLongPress })
}
state(MyState.UNLOCK) {
edge<MyEvent.PressLock>(MyState.LOCK, guard = { !it.isLongPress })
}
}
}
for more details, please see FsmTest
repositories {
maven { url "https://dl.bintray.com/tomoya0x00/maven" }
}
def statekVersion = "0.3.0"
// For multiplatform projects
implementation "com.github.tomoya0x00:statek:$statekVersion"
// For jvm projects
implementation "com.github.tomoya0x00:statek-jvm:$statekVersion"