fsm: improve and convert to interface
Signed-off-by: Vasiliy Tolstov <v.tolstov@unistack.org>
This commit is contained in:
52
fsm/options.go
Normal file
52
fsm/options.go
Normal file
@@ -0,0 +1,52 @@
|
||||
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
|
||||
}
|
||||
Reference in New Issue
Block a user