53 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			53 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| package fsm
 | |
| 
 | |
| // Options struct holding fsm options
 | |
| type Options struct {
 | |
| 	// Initial state
 | |
| 	Initial string
 | |
| 	// Wrappers runs before state
 | |
| 	Wrappers []StateWrapper
 | |
| 	// DryRun mode
 | |
| 	DryRun bool
 | |
| }
 | |
| 
 | |
| // Option func signature
 | |
| type Option func(*Options)
 | |
| 
 | |
| // StateOptions holds state options
 | |
| type StateOptions struct {
 | |
| 	DryRun bool
 | |
| }
 | |
| 
 | |
| // StateDryRun says that state executes in dry run mode
 | |
| func StateDryRun(b bool) StateOption {
 | |
| 	return func(o *StateOptions) {
 | |
| 		o.DryRun = b
 | |
| 	}
 | |
| }
 | |
| 
 | |
| // StateOption func signature
 | |
| type StateOption func(*StateOptions)
 | |
| 
 | |
| // InitialState sets init state for state machine
 | |
| func InitialState(initial string) Option {
 | |
| 	return func(o *Options) {
 | |
| 		o.Initial = initial
 | |
| 	}
 | |
| }
 | |
| 
 | |
| // WrapState adds a state Wrapper to a list of options passed into the fsm
 | |
| func WrapState(w StateWrapper) Option {
 | |
| 	return func(o *Options) {
 | |
| 		o.Wrappers = append(o.Wrappers, w)
 | |
| 	}
 | |
| }
 | |
| 
 | |
| // NewOptions returns new Options struct filled by passed Option
 | |
| func NewOptions(opts ...Option) Options {
 | |
| 	options := Options{}
 | |
| 	for _, o := range opts {
 | |
| 		o(&options)
 | |
| 	}
 | |
| 	return options
 | |
| }
 |