package main
import (
"fmt"
"git.sr.ht/~minus/fsm"
)
func cast[A any](handler func(event string, arg A)) func(event string, arg interface{}) {
return func(event string, arg interface{}) {
handler(event, arg.(A))
}
}
func main() {
m := fsm.FSM{
State: "stopped",
Transitions: []fsm.Transition{
{"stopped", "start", "started", cast(func(event string, arg int) { x := arg + 1; fmt.Printf("starting... %d\n", x) })},
},
}
newState, err := m.Process("start", 1337)
if err != nil {
panic(err)
}
fmt.Printf("final state: %v\n", newState)
}