30 lines
		
	
	
		
			605 B
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			30 lines
		
	
	
		
			605 B
		
	
	
	
		
			Go
		
	
	
	
	
	
| package fsm
 | |
| 
 | |
| import (
 | |
| 	"context"
 | |
| 	"errors"
 | |
| )
 | |
| 
 | |
| var (
 | |
| 	ErrInvalidState = errors.New("does not exists")
 | |
| 	StateEnd        = "end"
 | |
| )
 | |
| 
 | |
| type State interface {
 | |
| 	Name() string
 | |
| 	Body() interface{}
 | |
| }
 | |
| 
 | |
| // StateWrapper wraps the StateFunc and returns the equivalent
 | |
| type StateWrapper func(StateFunc) StateFunc
 | |
| 
 | |
| // StateFunc called on state transition and return next step and error
 | |
| type StateFunc func(ctx context.Context, state State, opts ...StateOption) (State, error)
 | |
| 
 | |
| type FSM interface {
 | |
| 	Start(context.Context, interface{}, ...Option) (interface{}, error)
 | |
| 	Current() string
 | |
| 	Reset()
 | |
| 	State(string, StateFunc)
 | |
| }
 |