-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathoptions.go
94 lines (78 loc) · 2.15 KB
/
options.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
package tree
// Options contains task options
type Options struct {
// name of the task
Name string
// logger for internal task logs, defaults to nop logger
Logger Logger
// work to be performed by the task
Work WorkHandler
}
// NewOptions returns new Options with the given options
func NewOptions(opts ...Option) Options {
options := Options{}
options.Apply(opts...)
return options
}
// Apply applies the given options
func (opts *Options) Apply(builders ...Option) *Options {
for _, builder := range builders {
builder.apply(opts)
}
return opts
}
// Copy returns a copy of the options
func (opts *Options) Copy() Options {
return *opts
}
// GetLogger returns a logger instance or default
func (opts *Options) GetLogger() Logger {
if v := opts.Logger; v != nil {
return v
}
return defaultLogger
}
// optionFunc is a helper func that satisfies the Option interface
type optionFunc func(options *Options)
func (f optionFunc) apply(options *Options) {
f(options)
}
// Option implements an option that can be applied to Options
type Option interface {
apply(options *Options)
}
// WithName returns an Option that applies a Name to Options
func WithName(name string) Option {
return optionFunc(func(options *Options) {
options.Name = name
})
}
// WithLogger returns an Option that applies a Logger to Options
func WithLogger(logger Logger) Option {
return optionFunc(func(options *Options) {
options.Logger = logger
})
}
// WithWork returns an Option that applies a WorkHandler to Options
func WithWork(handler WorkHandler) Option {
return optionFunc(func(options *Options) {
options.Work = handler
})
}
// WithWorkFunc returns an Option that applies a WorkHandler to Options
func WithWorkFunc(f WorkHandlerFunc) Option {
return WithWork(f)
}
// WithOptions returns an Option that replaces the given options to Options
func WithOptions(newOptions Options) Option {
return optionFunc(func(options *Options) {
*options = newOptions
})
}
// clearNonInheritables returns an Option that resets the non-inheritable options
func clearNonInheritables() Option {
return optionFunc(func(options *Options) {
options.Name = ""
options.Work = nil
})
}