Simple state machine for go
Find a file
Alexander Kiryukhin 2b10929c48 Added merge
2020-07-15 16:08:05 +03:00
.github/workflows Create go.yml 2019-12-08 13:48:46 +03:00
images Update 2020-07-15 15:26:24 +03:00
.gitignore Initial 2019-12-08 13:40:57 +03:00
go.mod Initial 2019-12-08 13:40:57 +03:00
placeer.go Initial 2019-12-08 13:40:57 +03:00
README.md Update 2020-07-15 15:26:24 +03:00
workflow.go Added merge 2020-07-15 16:08:05 +03:00
workflow_test.go Update 2020-07-15 15:26:24 +03:00

Workflow for Go

GoDoc

Simple state machine. Inspired by Symfony Workflow.

Example usage

o := new(ObjectImplementedPlaceer)

w := NewWorkflow("Start")
w.AddTransition("Start", "A")
w.AddTransition("Start", "B")
w.AddTransition("A", "C")
w.AddTransition("B",  "D")
w.AddTransition( "C", "D")
w.AddTransition("C", "Finish")
w.AddTransition("D", "Finish")

w.Can(o, "A") // == nil
w.Can(o, "C") // == ErrTransitionNotFound

w.GetEnabledTransitions(o) // []Place{"A", "B"}
w.Apply(o, "A") // o now at "A" place
w.GetEnabledTransitions(o) // []Place{"C"}

w.DumpToDot() // See above

Dump result

digraph {
    Start[color="blue"]
    Start -> A[label="Start → A"];
    Start -> B[label="Start → B"];
    A -> C[label="A → C"];
    B -> D[label="B → D"];
    C -> D[label="C → D"];
    C -> Finish[label="C → Finish"];
    D -> Finish[label="D → Finish"];
}

Visualization:

Workflow visualization