-
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathdi.go
151 lines (126 loc) · 3.42 KB
/
di.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
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
// Code generated with jinja2 templates. DO NOT EDIT.
package broker
import (
"fmt"
"github.com/go-micro/microwire/v5/logger"
"github.com/go-micro/microwire/v5/registry"
"github.com/go-micro/microwire/v5/cli"
"github.com/go-micro/microwire/v5/config"
"github.com/go-micro/microwire/v5/di"
"github.com/google/wire"
)
type DiFlags struct{}
// DiConfig is marker that DiFlags has been parsed into Config
type DiConfig struct{}
const (
cliArgPlugin = "broker"
cliArgAddresses = "broker_address"
)
func ProvideFlags(
config *Config,
cliConfig *cli.Config,
c cli.Cli,
) (DiFlags, error) {
if cliConfig.NoFlags {
// Defined silently ignore that
return DiFlags{}, nil
}
if err := c.Add(
cli.Name(cli.PrefixName(cliConfig.ArgPrefix, cliArgPlugin)),
cli.Usage("Broker for pub/sub. http, nats, rabbitmq"),
cli.Default(config.Plugin),
cli.EnvVars(cli.PrefixEnv(cliConfig.ArgPrefix, cliArgPlugin)),
); err != nil {
return DiFlags{}, err
}
if err := c.Add(
cli.Name(cli.PrefixName(cliConfig.ArgPrefix, cliArgAddresses)),
cli.Usage("List of broker addresses"),
cli.Default(config.Addresses),
cli.EnvVars(cli.PrefixEnv(cliConfig.ArgPrefix, cliArgAddresses)),
); err != nil {
return DiFlags{}, err
}
return DiFlags{}, nil
}
func ProvideConfig(
_ di.DiConfig,
flags DiFlags,
config *Config,
c cli.Cli,
cliConfig *cli.Config,
configor config.Config,
) (DiConfig, error) {
defConfig := NewConfig()
cfg := sourceConfig{Broker: *defConfig}
if configor != nil {
if err := configor.Scan(&cfg); err != nil {
return DiConfig{}, err
}
}
if err := config.Merge(&cfg.Broker); err != nil {
return DiConfig{}, err
}
if cliConfig.NoFlags {
// Dont parse flags if NoFlags has been given
return DiConfig{}, nil
}
defConfig = NewConfig()
if f, ok := c.Get(cli.PrefixName(cliConfig.ArgPrefix, cliArgPlugin)); ok {
defConfig.Plugin = cli.FlagValue(f, defConfig.Plugin)
}
if f, ok := c.Get(cli.PrefixName(cliConfig.ArgPrefix, cliArgAddresses)); ok {
defConfig.Addresses = cli.FlagValue(f, []string{})
}
if err := config.Merge(defConfig); err != nil {
return DiConfig{}, err
}
return DiConfig{}, nil
}
func ProvideConfigNoFlags(
config *Config,
configor config.Config,
) (DiConfig, error) {
defConfig := NewConfig()
c := sourceConfig{Broker: *defConfig}
if configor != nil {
if err := configor.Scan(&c); err != nil {
return DiConfig{}, err
}
}
if err := config.Merge(&c.Broker); err != nil {
return DiConfig{}, err
}
return DiConfig{}, nil
}
func Provide(
// Marker so cli has been merged into Config
_ DiConfig,
log logger.Logger,
registry registry.Registry,
config *Config,
) (Broker, error) {
if !config.Enabled {
// Not enabled silently ignore that
return nil, nil
}
pluginFunc, err := Plugins.Get(config.Plugin)
if err != nil {
return nil, fmt.Errorf("unknown plugin broker: %s", config.Plugin)
}
opts := []Option{WithConfig(config)}
if len(config.Addresses) > 0 {
opts = append(opts, Addrs(config.Addresses...))
}
if config.Logger.Enabled {
loggerFunc, err := logger.Plugins.Get(config.Logger.Plugin)
if err != nil {
return nil, fmt.Errorf("{{Name}} unknown logger: %s", config.Logger.Plugin)
}
log = loggerFunc(logger.ConfigToOpts(config.Logger)...)
}
opts = append(opts, Registry(registry), Logger(log))
return pluginFunc(opts...), nil
}
var DiSet = wire.NewSet(ProvideFlags, ProvideConfig, Provide)
var DiNoCliSet = wire.NewSet(ProvideConfigNoFlags, Provide)