Skip to content

lancer-kit/sam

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

10 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Sam

Sam is the finite state machine engine.

You can define state diagram by adding Transitions and add transition hooks.

Usage

Add to project using go get

go get github.com/lancer-kit/sam

Examples

  • Without hooks
package main

import (
	"fmt"

	"github.com/lancer-kit/sam"
)

const (
	WStateDisabled    sam.State = "Disabled"
	WStateEnabled     sam.State = "Enabled"
	WStateInitialized sam.State = "Initialized"
	WStateRun         sam.State = "Run"
	WStateStopped     sam.State = "Stopped"
	WStateFailed      sam.State = "Failed"
)

// newWorkerSM returns filled state machine of worker lifecycle
//
// (*) -> [Disabled] -> [Enabled] -> [Initialized] -> [Run] <-> [Stopped]
//          ↑ ↑____________|  |          |  |  ↑         |
//          |_________________|__________|  |  |------|  ↓
//                            |-------------|-----> [Failed]
func main() {
	workerSM, err := sam.NewStateMachine().
		AddTransitions(WStateDisabled, WStateEnabled).
		AddTransitions(WStateEnabled, WStateInitialized, WStateFailed, WStateDisabled).
		AddTransitions(WStateInitialized, WStateRun, WStateFailed, WStateDisabled).
		AddTransitions(WStateRun, WStateStopped, WStateFailed).
		AddTransitions(WStateStopped, WStateRun).
		AddTransitions(WStateFailed, WStateInitialized, WStateDisabled).
		Finalize(WStateDisabled)
	if err != nil || workerSM == nil {
		fmt.Println("init failed: ", err)
	}
	clone := workerSM.Clone()
	
	err = clone.GoTo(WStateEnabled)
	if err != nil {
		fmt.Println("error: ", err)
	}

}

About

Sam is the finite state machine engine.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages