Documentation
¶
Index ¶
- Constants
- type Intermediate
- type Mock
- func (svc *Mock) HandleHigh(ctx context.Context, flow *workflow.Flow, amount int) (branch string, err error)
- func (svc *Mock) HandleLow(ctx context.Context, flow *workflow.Flow, amount int) (branch string, err error)
- func (svc *Mock) HandleMid(ctx context.Context, flow *workflow.Flow, amount int) (branch string, err error)
- func (svc *Mock) MockHandleHigh(...) *Mock
- func (svc *Mock) MockHandleLow(...) *Mock
- func (svc *Mock) MockHandleMid(...) *Mock
- func (svc *Mock) MockRouter(...) *Mock
- func (svc *Mock) MockSwitch(...) *Mock
- func (svc *Mock) MockSwitchNoMatch(...) *Mock
- func (svc *Mock) OnShutdown(ctx context.Context) (err error)
- func (svc *Mock) OnStartup(ctx context.Context) (err error)
- func (svc *Mock) Router(ctx context.Context, flow *workflow.Flow, amount int) (amountOut int, err error)
- func (svc *Mock) Switch(ctx context.Context) (graph *workflow.Graph, err error)
- func (svc *Mock) SwitchNoMatch(ctx context.Context) (graph *workflow.Graph, err error)
- type Service
- func (svc *Service) HandleHigh(ctx context.Context, flow *workflow.Flow, amount int) (branch string, err error)
- func (svc *Service) HandleLow(ctx context.Context, flow *workflow.Flow, amount int) (branch string, err error)
- func (svc *Service) HandleMid(ctx context.Context, flow *workflow.Flow, amount int) (branch string, err error)
- func (svc *Service) Init(initializer func(svc *Service) (err error)) *Service
- func (svc *Service) OnShutdown(ctx context.Context) (err error)
- func (svc *Service) OnStartup(ctx context.Context) (err error)
- func (svc *Service) Router(ctx context.Context, flow *workflow.Flow, amount int) (amountOut int, err error)
- func (svc *Service) Switch(ctx context.Context) (graph *workflow.Graph, err error)
- func (svc *Service) SwitchNoMatch(ctx context.Context) (graph *workflow.Graph, err error)
- type ToDo
Constants ¶
const ( Hostname = switchflowapi.Hostname Version = 1 )
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type Intermediate ¶
Intermediate extends and customizes the generic base connector.
func NewIntermediate ¶
func NewIntermediate(impl ToDo) *Intermediate
NewIntermediate creates a new instance of the intermediate.
type Mock ¶
type Mock struct {
*Intermediate
// contains filtered or unexported fields
}
Mock is a mockable version of the microservice, allowing functions, event sinks and web handlers to be mocked.
func (*Mock) HandleHigh ¶
func (svc *Mock) HandleHigh(ctx context.Context, flow *workflow.Flow, amount int) (branch string, err error)
HandleHigh executes the mock handler.
func (*Mock) HandleLow ¶
func (svc *Mock) HandleLow(ctx context.Context, flow *workflow.Flow, amount int) (branch string, err error)
HandleLow executes the mock handler.
func (*Mock) HandleMid ¶
func (svc *Mock) HandleMid(ctx context.Context, flow *workflow.Flow, amount int) (branch string, err error)
HandleMid executes the mock handler.
func (*Mock) MockHandleHigh ¶
func (svc *Mock) MockHandleHigh(handler func(ctx context.Context, flow *workflow.Flow, amount int) (branch string, err error)) *Mock
MockHandleHigh sets up a mock handler for HandleHigh.
func (*Mock) MockHandleLow ¶
func (svc *Mock) MockHandleLow(handler func(ctx context.Context, flow *workflow.Flow, amount int) (branch string, err error)) *Mock
MockHandleLow sets up a mock handler for HandleLow.
func (*Mock) MockHandleMid ¶
func (svc *Mock) MockHandleMid(handler func(ctx context.Context, flow *workflow.Flow, amount int) (branch string, err error)) *Mock
MockHandleMid sets up a mock handler for HandleMid.
func (*Mock) MockRouter ¶
func (svc *Mock) MockRouter(handler func(ctx context.Context, flow *workflow.Flow, amount int) (amountOut int, err error)) *Mock
MockRouter sets up a mock handler for Router.
func (*Mock) MockSwitch ¶
func (svc *Mock) MockSwitch(handler func(ctx context.Context, flow *workflow.Flow, amount int) (branch string, err error)) *Mock
MockSwitch sets up a mock handler for the Switch workflow. The handler receives typed inputs from the workflow's state and returns typed outputs. A nil handler clears the mock.
func (*Mock) MockSwitchNoMatch ¶
func (svc *Mock) MockSwitchNoMatch(handler func(ctx context.Context, flow *workflow.Flow, amount int) (branch string, err error)) *Mock
MockSwitchNoMatch sets up a mock handler for the SwitchNoMatch workflow. The handler receives typed inputs from the workflow's state and returns typed outputs. A nil handler clears the mock.
func (*Mock) OnShutdown ¶
OnShutdown is called when the microservice is shut down.
func (*Mock) Router ¶
func (svc *Mock) Router(ctx context.Context, flow *workflow.Flow, amount int) (amountOut int, err error)
Router executes the mock handler.
type Service ¶
type Service struct {
*Intermediate // IMPORTANT: Do not remove
}
Service implements switchflow.verify, exercising first-match-wins Switch transitions.
func (*Service) HandleHigh ¶
func (svc *Service) HandleHigh(ctx context.Context, flow *workflow.Flow, amount int) (branch string, err error)
HandleHigh runs when the first switch arm matches (amount>=10000).
func (*Service) HandleLow ¶
func (svc *Service) HandleLow(ctx context.Context, flow *workflow.Flow, amount int) (branch string, err error)
HandleLow runs as the default switch arm (when="true").
func (*Service) HandleMid ¶
func (svc *Service) HandleMid(ctx context.Context, flow *workflow.Flow, amount int) (branch string, err error)
HandleMid runs when the second switch arm matches (amount>=1000).
func (*Service) OnShutdown ¶
OnShutdown is called when the microservice is shut down.
func (*Service) Router ¶
func (svc *Service) Router(ctx context.Context, flow *workflow.Flow, amount int) (amountOut int, err error)
Router passes the amount through to state so downstream Switch transitions can match on it.
func (*Service) Switch ¶
Switch defines the graph Router -> {HandleHigh (amount>=10000) | HandleMid (amount>=1000) | HandleLow (true)} -> END. Exactly one branch runs per execution; the trailing arm uses when="true" so every input is covered.
func (*Service) SwitchNoMatch ¶
SwitchNoMatch defines the same router but with no default branch: only two arms (high and mid). An input that satisfies neither predicate ends the flow at the router with no branch field set. The pinned semantic is "no-match -> flow completes cleanly, side-channel absent."
type ToDo ¶
type ToDo interface {
OnStartup(ctx context.Context) (err error)
OnShutdown(ctx context.Context) (err error)
Router(ctx context.Context, flow *workflow.Flow, amount int) (amountOut int, err error) // MARKER: Router
HandleHigh(ctx context.Context, flow *workflow.Flow, amount int) (branch string, err error) // MARKER: HandleHigh
HandleMid(ctx context.Context, flow *workflow.Flow, amount int) (branch string, err error) // MARKER: HandleMid
HandleLow(ctx context.Context, flow *workflow.Flow, amount int) (branch string, err error) // MARKER: HandleLow
Switch(ctx context.Context) (graph *workflow.Graph, err error) // MARKER: Switch
SwitchNoMatch(ctx context.Context) (graph *workflow.Graph, err error) // MARKER: SwitchNoMatch
}
ToDo is implemented by the service or mock.