Module Contents alltypes
      Module Contents interface IStateMachine<S, T : Any>
        Module Contents abstract val state: S
        abstract fun transition(transition: T): Unit
        abstract val transitions: Set<KClass<out T>>
        abstract fun transitionsTo(targetState: S): Set<KClass<out T>>
      open class StateMachine<S, T : Any> : IStateMachine<S, T>
        Module Contents StateMachine(initialState: S, vararg transitionRules: TransitionDef<S, out T>)
        StateMachine(initialState: S, transitions: List<TransitionDef<S, out T>>)
        fun registerCallback(transitionCallback: TransitionCallback<S, T>): Boolean
        var state: S
        open fun transition(transition: T): Unit
        fun <F, T : Any> transition(oldState: F, transition: KClass<T>, newState: F): TransitionDef<F, T>
        val transitionCallbacks: List<TransitionCallback<S, T>>
        open val transitions: Set<KClass<out T>>
        open fun transitionsTo(targetState: S): Set<KClass<out T>>
        fun unregisterCallback(transitionCallback: TransitionCallback<S, T>): Boolean
      interface TransitionBuilder<out S, out T : Any>
        Module Contents abstract val event: KClass<out T>
        abstract val startState: S
      interface TransitionCallback<S, T : Any>
        Module Contents abstract fun enteredState(stateMachine: StateMachine<S, T>, previousState: S, transition: T, currentState: S): Unit
        abstract fun enteringState(stateMachine: StateMachine<S, T>, currentState: S, transition: T, targetState: S): Unit
      data class TransitionDef<S, T : Any>
        Module Contents TransitionDef(oldState: S, transition: KClass<T>, newState: S)
        val newState: S
        val oldState: S
        val transition: KClass<T>
    package com.toxicbakery.kfinstatemachine
      Module Contents interface IStateMachine<S, T : Any>
        Module Contents abstract val state: S
        abstract fun transition(transition: T): Unit
        abstract val transitions: Set<KClass<out T>>
        abstract fun transitionsTo(targetState: S): Set<KClass<out T>>
      open class StateMachine<S, T : Any> : IStateMachine<S, T>
        Module Contents StateMachine(initialState: S, vararg transitionRules: TransitionDef<S, out T>)
        StateMachine(initialState: S, transitions: List<TransitionDef<S, out T>>)
        fun registerCallback(transitionCallback: TransitionCallback<S, T>): Boolean
        var state: S
        open fun transition(transition: T): Unit
        fun <F, T : Any> transition(oldState: F, transition: KClass<T>, newState: F): TransitionDef<F, T>
        val transitionCallbacks: List<TransitionCallback<S, T>>
        open val transitions: Set<KClass<out T>>
        open fun transitionsTo(targetState: S): Set<KClass<out T>>
        fun unregisterCallback(transitionCallback: TransitionCallback<S, T>): Boolean
      interface TransitionBuilder<out S, out T : Any>
        Module Contents abstract val event: KClass<out T>
        abstract val startState: S
      interface TransitionCallback<S, T : Any>
        Module Contents abstract fun enteredState(stateMachine: StateMachine<S, T>, previousState: S, transition: T, currentState: S): Unit
        abstract fun enteringState(stateMachine: StateMachine<S, T>, currentState: S, transition: T, targetState: S): Unit
      data class TransitionDef<S, T : Any>
        Module Contents TransitionDef(oldState: S, transition: KClass<T>, newState: S)
        val newState: S
        val oldState: S
        val transition: KClass<T>
      infix fun <S, T : Any> S.onTransition(event: KClass<out T>): TransitionBuilder<S, T>
      infix fun <S, T : Any> TransitionBuilder<S, T>.resultsIn(newState: S): TransitionDef<S, out T>