-
Notifications
You must be signed in to change notification settings - Fork 0
/
default_provider.go
63 lines (53 loc) · 2 KB
/
default_provider.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
package config
// DefaultProvider represents a set of default values.
// Prefer keeping defaults over providing default values local to other
// providers as it guarantees presence of the default values indiffirent to
// the provider set that have been activated.
type DefaultProvider struct {
weight int
registry map[string]Value
ready chan struct{}
}
var _ Provider = (*DefaultProvider)(nil)
// NewDefaultProvider is a constructor for DefaultProvider.
func NewDefaultProvider(repo *Repository, weight int) (*DefaultProvider, error) {
return NewDefaultProviderWithDefaults(repo, weight, map[string]Value{})
}
// NewDefaultProviderWithDefaults is an alternative constructor for
// DefaultProvider. Accepts an extra registry argument as a complete replacement
// for the default one.
func NewDefaultProviderWithDefaults(repo *Repository, weight int, registry map[string]Value) (*DefaultProvider, error) {
prov := &DefaultProvider{
weight: weight,
registry: registry,
ready: make(chan struct{}),
}
repo.RegisterProvider(prov)
return prov, nil
}
// Name returns provider name: default
func (dp *DefaultProvider) Name() string { return "default" }
// Depends returns the list of provider dependencies: none
func (dp *DefaultProvider) Depends() []string { return []string{} }
// Weight returns the provider weight
func (dp *DefaultProvider) Weight() int { return dp.weight }
// SetUp registers all keys from the registry in the repo
func (dp *DefaultProvider) SetUp(repo *Repository) error {
defer close(dp.ready)
for k := range dp.registry {
if err := repo.RegisterKey(NewKey(k), dp); err != nil {
return err
}
}
return nil
}
// TearDown is a no-op operation for DefaultProvider
func (dp *DefaultProvider) TearDown(*Repository) error { return nil }
// Get is the primary method for fetching values from the default registry
func (dp *DefaultProvider) Get(key Key) (*KeyValue, bool) {
<-dp.ready
if val, ok := dp.registry[key.String()]; ok {
return &KeyValue{Key: key, Value: val}, ok
}
return nil, false
}