Skip to content
/ yafsm Public

Yet Another Finite State Machine for golang

License

Notifications You must be signed in to change notification settings

bcen/yafsm

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

14 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Yet Another Finite State Machine

A toy, DO NOT USE IN PRODUCTION.

Examples:

  • Creating a transition handler
const (
    green  yafsm.State = "green"
    yellow yafsm.State = "yellow"
    red    yafsm.State = "red"
)
handler := yafsm.CreateTransitionHandler([]yafsm.Transition{
    yafsm.NewTransition(yafsm.NewStates(red), green),
    yafsm.NewTransition(yafsm.NewStates(green), yellow),
    yafsm.NewTransition(yafsm.NewStates(yellow), red),
})

err := handler(green, red)
if err != nil {
    fmt.Println(err)
}

err := handler(green, yellow)
if err == nil {
    fmt.Println("Yay~")
}
  • Creating a DOT string from list of transitions
const (
    todo       yafsm.State = "todo"
    inprogress yafsm.State = "inprogress"
    verify     yafsm.State = "verify"
    done       yafsm.State = "done"
)
transitions := []yafsm.Transition{
    yafsm.NewTransition(yafsm.NewStates(todo, inprogress, verify), todo),
    yafsm.NewTransition(yafsm.NewStates(todo, inprogress, verify), inprogress),
    yafsm.NewTransition(yafsm.NewStates(inprogress, verify), verify),
    yafsm.NewTransition(yafsm.NewStates(verify), done),
}

dot := yafsm.CreateDOT(transitions)
fmt.Println(dot)

Output:

digraph  {
        todo->todo;
        inprogress->todo;
        verify->todo;
        todo->inprogress;
        inprogress->inprogress;
        verify->inprogress;
        inprogress->verify;
        verify->verify;
        verify->done;
        done;
        inprogress;
        todo;
        verify;

}

Releases

No releases published

Packages

No packages published

Languages