aboutsummaryrefslogblamecommitdiff
path: root/README.md
blob: 4f43fab6382631f64ab3371d11c35799113d4189 (plain) (tree)
1
2
3
4
5
6
7
8
9
10
11

                 

                                                                                                                 






                                                                                          














                                               







                          







                                      






                                             
# Workflow for Go

[![GoDoc](https://godoc.org/github.com/neonxp/workflow?status.svg)](https://godoc.org/github.com/neonxp/workflow)

Simple state machine. Inspired by [Symfony Workflow](https://github.com/symfony/workflow).

## Example usage

```go
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](images/example.png)