-
Notifications
You must be signed in to change notification settings - Fork 3
/
config.go
70 lines (61 loc) · 1.47 KB
/
config.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
package nrelay
//
// relay.yaml
// ----------
// primary: "nats://master1.example.com:4222/"
// secondary: "nats://master2.example.com:4222/"
// nats: "nats://localhost:4222/"
// topic:
// "foo.>":
// worker: 2
// "bar.>":
// worker: 2
//
type RelayConfig struct {
PrimaryUrl string `yaml:"primary"`
SecondaryUrl string `yaml:"secondary"`
NatsUrl string `yaml:"nats"`
Topics map[string]RelayClientConfig `yaml:"topic"`
}
type RelayClientConfig struct {
WorkerNum int `yaml:"worker"`
PrefixSize int `yaml:"prefix"`
}
func Topics(topics ...*topicNameOptionTuple) map[string]RelayClientConfig {
conf := make(map[string]RelayClientConfig)
for _, topic := range topics {
conf[topic.name] = topic.option
}
return conf
}
type topicNameOptionTuple struct {
name string
option RelayClientConfig
}
func defaultTopicOption() RelayClientConfig {
return RelayClientConfig{
WorkerNum: 1,
PrefixSize: 0,
}
}
type topicOptionFunc func(*RelayClientConfig)
func Topic(name string, funcs ...topicOptionFunc) *topicNameOptionTuple {
tuple := &topicNameOptionTuple{
name: name,
option: defaultTopicOption(),
}
for _, fn := range funcs {
fn(&tuple.option)
}
return tuple
}
func WorkerNum(num int) topicOptionFunc {
return func(opt *RelayClientConfig) {
opt.WorkerNum = num
}
}
func PrefixSize(size int) topicOptionFunc {
return func(opt *RelayClientConfig) {
opt.PrefixSize = size
}
}