master
go 60 lines 1.12 KB
Raw
1 package options
2
3 type PubSubPeersSettings struct {
4 Topic string
5 }
6
7 type PubSubSubscribeSettings struct {
8 Discover bool
9 }
10
11 type (
12 PubSubPeersOption func(*PubSubPeersSettings) error
13 PubSubSubscribeOption func(*PubSubSubscribeSettings) error
14 )
15
16 func PubSubPeersOptions(opts ...PubSubPeersOption) (*PubSubPeersSettings, error) {
17 options := &PubSubPeersSettings{
18 Topic: "",
19 }
20
21 for _, opt := range opts {
22 err := opt(options)
23 if err != nil {
24 return nil, err
25 }
26 }
27 return options, nil
28 }
29
30 func PubSubSubscribeOptions(opts ...PubSubSubscribeOption) (*PubSubSubscribeSettings, error) {
31 options := &PubSubSubscribeSettings{
32 Discover: false,
33 }
34
35 for _, opt := range opts {
36 err := opt(options)
37 if err != nil {
38 return nil, err
39 }
40 }
41 return options, nil
42 }
43
44 type pubsubOpts struct{}
45
46 var PubSub pubsubOpts
47
48 func (pubsubOpts) Topic(topic string) PubSubPeersOption {
49 return func(settings *PubSubPeersSettings) error {
50 settings.Topic = topic
51 return nil
52 }
53 }
54
55 func (pubsubOpts) Discover(discover bool) PubSubSubscribeOption {
56 return func(settings *PubSubSubscribeSettings) error {
57 settings.Discover = discover
58 return nil
59 }
60 }