switchflow

package
v1.38.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jun 14, 2026 License: Apache-2.0 Imports: 14 Imported by: 0

Documentation

Index

Constants

View Source
const (
	Hostname = switchflowapi.Hostname
	Version  = 1
)

Variables

This section is empty.

Functions

This section is empty.

Types

type Intermediate

type Intermediate struct {
	*connector.Connector
	ToDo
}

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 NewMock

func NewMock() *Mock

NewMock creates a new mockable version of the microservice.

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

func (svc *Mock) OnShutdown(ctx context.Context) (err error)

OnShutdown is called when the microservice is shut down.

func (*Mock) OnStartup

func (svc *Mock) OnStartup(ctx context.Context) (err error)

OnStartup is called when the microservice is started up.

func (*Mock) Router

func (svc *Mock) Router(ctx context.Context, flow *workflow.Flow, amount int) (amountOut int, err error)

Router executes the mock handler.

func (*Mock) Switch

func (svc *Mock) Switch(ctx context.Context) (graph *workflow.Graph, err error)

Switch returns the workflow graph, or a mocked graph if MockSwitch was called.

func (*Mock) SwitchNoMatch

func (svc *Mock) SwitchNoMatch(ctx context.Context) (graph *workflow.Graph, err error)

SwitchNoMatch returns the workflow graph, or a mocked graph if MockSwitchNoMatch was called.

type Service

type Service struct {
	*Intermediate // IMPORTANT: Do not remove
}

Service implements switchflow.verify, exercising first-match-wins Switch transitions.

func NewService

func NewService() *Service

NewService creates a new instance of the microservice.

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) Init

func (svc *Service) Init(initializer func(svc *Service) (err error)) *Service

Init enables a single-statement pattern for initializing the microservice.

func (*Service) OnShutdown

func (svc *Service) OnShutdown(ctx context.Context) (err error)

OnShutdown is called when the microservice is shut down.

func (*Service) OnStartup

func (svc *Service) OnStartup(ctx context.Context) (err error)

OnStartup is called when the microservice is started up.

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

func (svc *Service) Switch(ctx context.Context) (graph *workflow.Graph, err error)

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

func (svc *Service) SwitchNoMatch(ctx context.Context) (graph *workflow.Graph, err error)

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.

Directories

Path Synopsis

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL