-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathdefinitions.go
118 lines (93 loc) · 2.83 KB
/
definitions.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
package plinko
import (
"context"
)
type State string
type Trigger string
type Predicate func(context.Context, Payload, TransitionInfo) error
type TriggerPredicate func(context.Context, Payload, TransitionInfo) bool
type Operation func(context.Context, Payload, TransitionInfo) (Payload, error)
type ErrorOperation func(context.Context, Payload, ModifiableTransitionInfo, error) (Payload, error)
type StateDefinition interface {
//State() string
OnEntry(Operation, ...OperationOption) StateDefinition
OnError(ErrorOperation, ...OperationOption) StateDefinition
OnExit(Operation, ...OperationOption) StateDefinition
OnTriggerEntry(Trigger, Operation, ...OperationOption) StateDefinition
OnTriggerExit(Trigger, Operation, ...OperationOption) StateDefinition
Permit(Trigger, State) StateDefinition
PermitIf(Predicate, Trigger, State) StateDefinition
PermitReentry(Trigger) StateDefinition
PermitReentryIf(Predicate, Trigger) StateDefinition
}
type StateMachine interface {
Fire(context.Context, Payload, Trigger) (Payload, error)
CanFire(context.Context, Payload, Trigger) error
EnumerateActiveTriggers(payload Payload) ([]Trigger, error)
}
type TransitionInfo interface {
GetSource() State
GetDestination() State
GetTrigger() Trigger
}
type ModifiableTransitionInfo interface {
GetSource() State
GetDestination() State
GetTrigger() Trigger
SetDestination(State)
}
type SideEffect func(context.Context, StateAction, Payload, TransitionInfo, int64)
type PlinkoDefinition interface {
Configure(State, ...StateOption) StateDefinition
SideEffect(SideEffect) PlinkoDefinition
FilteredSideEffect(SideEffectFilter, SideEffect) PlinkoDefinition
Compile() CompilerOutput
RenderUml() (Uml, error)
Render(Renderer) error
}
type Renderer interface {
Render(Graph) error
}
type Graph interface {
Edges(func(State, State, Trigger))
Nodes(func(State, StateConfig))
}
type Payload interface {
GetState() State
}
type CompilerMessage struct {
CompileMessage CompilerReportType
Message string
}
type CompilerReportType string
const (
CompileError CompilerReportType = "Compile Error"
CompileWarning CompilerReportType = "Compile Warning"
// CompileInfo CompilerReportType "Compile Info"
)
type StateAction string
const (
BeforeTransition StateAction = "BeforeTransition"
BetweenStates StateAction = "MiddleTransition"
AfterTransition StateAction = "AfterTransition"
)
type SideEffectFilter int
const (
AllowBeforeTransition SideEffectFilter = 1
AllowBetweenStates SideEffectFilter = 2
AllowAfterTransition SideEffectFilter = 4
)
type Uml string
type CompilerOutput struct {
StateMachine StateMachine
Messages []CompilerMessage
}
type OperationConfig struct {
Name string
}
type OperationOption func(c *OperationConfig)
type StateConfig struct {
Name string
Description string
}
type StateOption func(c *StateConfig)