-
-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathopt.go
More file actions
33 lines (25 loc) · 704 Bytes
/
opt.go
File metadata and controls
33 lines (25 loc) · 704 Bytes
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
package loncha
type opParam[T any] struct {
Param T
}
// Opt ... functional options of lonch operator
type Opt[T any] func(*opParam[T]) Opt[T]
func (p *opParam[T]) Options(opts ...Opt[T]) (prevs []Opt[T]) {
for _, opt := range opts {
prevs = append(prevs, opt(p))
}
return
}
// DefauiltOpt ... default function option
func DefauiltOpt[T any]() *opParam[T] {
return &opParam[T]{}
}
// MergeOpts ... using innner in function with Opt[T]
// this run DefaultOpt() and Options() .
func MergeOpts[T any](opts ...Opt[T]) (*opParam[T], func(p *opParam[T])) {
param := DefauiltOpt[T]()
prevs := param.Options(opts...)
return param, func(p *opParam[T]) {
p.Options(prevs...)
}
}