-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathoptions.go
61 lines (47 loc) · 1.25 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
package jpipe
import "github.com/junitechnology/jpipe/options"
func Concurrent(concurrency int) options.Concurrent {
return options.Concurrent{Concurrency: concurrency}
}
func Ordered(orderBufferSize int) options.Ordered {
return options.Ordered{OrderBufferSize: orderBufferSize}
}
func Buffered(size int) options.Buffered {
return options.Buffered{Size: size}
}
func KeepFirst() options.Keep {
return options.Keep{Strategy: options.KEEP_FIRST}
}
func KeepLast() options.Keep {
return options.Keep{Strategy: options.KEEP_LAST}
}
func getOption[I any, O any](opts []I) *O {
for i := range opts {
if opt, ok := any(opts[i]).(O); ok {
return &opt
}
}
return nil
}
func getOptionOrDefault[I any, O any](opts []I, defaultOpt O) O {
opt := getOption[I, O](opts)
if opt == nil {
return defaultOpt
}
return *opt
}
func getNodeOptions[O any](opts []O) []options.NodeOption {
return mapOptions[O, options.NodeOption](opts)
}
func getPooledWorkerOptions[O any](opts []O) []options.PooledWorkerOption {
return mapOptions[O, options.PooledWorkerOption](opts)
}
func mapOptions[O any, R any](opts []O) []R {
nodeOpts := []R{}
for _, opt := range opts {
if nodeOpt, ok := any(opt).(R); ok {
nodeOpts = append(nodeOpts, nodeOpt)
}
}
return nodeOpts
}