Skip to content

Commit 32af790

Browse files
committed
added getter methods to the unexported fields
Signed-off-by: bbland1 <[email protected]>
1 parent dd933fb commit 32af790

File tree

1 file changed

+37
-30
lines changed

1 file changed

+37
-30
lines changed

providers/multi-provider/pkg/providers.go

Lines changed: 37 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -7,66 +7,71 @@ import (
77

88
err "github.com/open-feature/go-sdk-contrib/providers/multi-provider/internal"
99

10-
of "github.com/open-feature/go-sdk/openfeature"
11-
ofhooks "github.com/open-feature/go-sdk/openfeature/hooks"
10+
"github.com/open-feature/go-sdk/openfeature"
11+
"github.com/open-feature/go-sdk/openfeature/hooks"
1212
)
1313

1414
var (
15-
errUniqueName = errors.New("Provider names must be unique.")
15+
errUniqueName = errors.New("provider names must be unique")
1616
)
1717

1818
// UniqueNameProvider allows for a unique name to be assigned to a provider during a multi-provider set up.
1919
// The name will be used when reporting errors & results to specify the provider associated.
2020
type UniqueNameProvider struct {
21-
Provider of.FeatureProvider
22-
Name string
21+
Provider openfeature.FeatureProvider
22+
UniqueName string
2323
}
2424

2525
// MultiMetadata defines the return of the MultiProvider metadata with the aggregated data of all the providers.
2626
type MultiMetadata struct {
2727
Name string
28-
OriginalMetadata map[string]of.Metadata
28+
OriginalMetadata map[string]openfeature.Metadata
2929
}
3030

3131
// MultiProvider implements openfeature `FeatureProvider` in a way to accept an array of providers.
3232
type MultiProvider struct {
3333
providersEntries []UniqueNameProvider
3434
providersEntriesByName map[string]UniqueNameProvider
35-
AggregatedMetadata map[string]of.Metadata
35+
AggregatedMetadata map[string]openfeature.Metadata
3636
EvaluationStrategy string
37-
events chan of.Event
38-
status of.State
37+
events chan openfeature.Event
38+
status openfeature.State
3939
mu sync.Mutex
4040
}
4141

4242
// NewMultiProvider returns the unified interface of multiple providers for interaction.
43-
func NewMultiProvider(passedProviders []UniqueNameProvider, evaluationStrategy string, logger ofhooks.LoggingHook) (*MultiProvider, error) {
43+
func NewMultiProvider(passedProviders []UniqueNameProvider, evaluationStrategy string, logger *hooks.LoggingHook) (*MultiProvider, error) {
4444
multiProvider := &MultiProvider{
4545
providersEntries: []UniqueNameProvider{},
4646
providersEntriesByName: map[string]UniqueNameProvider{},
47-
AggregatedMetadata: map[string]of.Metadata{},
47+
AggregatedMetadata: map[string]openfeature.Metadata{},
4848
}
4949

5050
err := registerProviders(multiProvider, passedProviders)
5151
if err != nil {
5252
return nil, err
5353
}
5454

55-
// err = multiProvider.Init(of.EvaluationContext{})
56-
// if err != nil {
57-
// return nil, err
58-
// }
59-
6055
return multiProvider, nil
6156
}
6257

58+
func (mp *MultiProvider) Providers() []UniqueNameProvider {
59+
return mp.providersEntries
60+
}
61+
62+
func (mp *MultiProvider) ProvidersByName() []UniqueNameProvider {
63+
return mp.providersEntries
64+
}
65+
66+
func (mp *MultiProvider) ProviderByName(name string) (UniqueNameProvider, bool) {
67+
provider, exists := mp.providersEntriesByName[name]
68+
return provider, exists
69+
}
70+
6371
// Metadata provides the name `multiprovider` and the names of each provider passed.
64-
func (mp *MultiProvider) Metadata() MultiMetadata {
72+
func (mp *MultiProvider) Metadata() openfeature.Metadata {
6573

66-
return MultiMetadata{
67-
Name: "multiprovider",
68-
OriginalMetadata: mp.AggregatedMetadata,
69-
}
74+
return openfeature.Metadata{Name: "multiprovider"}
7075
}
7176

7277
// registerProviders ensures that when setting up an instant of MultiProvider the providers provided either have a unique name or the base `metadata.Name` is made unique by adding an indexed based number to it.
@@ -75,7 +80,7 @@ func registerProviders(mp *MultiProvider, providers []UniqueNameProvider) error
7580
providersByName := make(map[string][]UniqueNameProvider)
7681

7782
for _, provider := range providers {
78-
uniqueName := provider.Name
83+
uniqueName := provider.UniqueName
7984

8085
if _, exists := providersByName[uniqueName]; exists {
8186
return errUniqueName
@@ -90,12 +95,14 @@ func registerProviders(mp *MultiProvider, providers []UniqueNameProvider) error
9095

9196
for name, providers := range providersByName {
9297
if len(providers) == 1 {
98+
providers[0].UniqueName = name
9399
mp.providersEntries = append(mp.providersEntries, providers[0])
94100
mp.providersEntriesByName[name] = providers[0]
95101
mp.AggregatedMetadata[name] = providers[0].Provider.Metadata()
96102
} else {
97103
for i, provider := range providers {
98104
uniqueName := fmt.Sprintf("%s-%d", name, i+1)
105+
provider.UniqueName = uniqueName
99106
mp.providersEntries = append(mp.providersEntries, provider)
100107
mp.providersEntriesByName[uniqueName] = provider
101108
mp.AggregatedMetadata[uniqueName] = provider.Provider.Metadata()
@@ -106,17 +113,17 @@ func registerProviders(mp *MultiProvider, providers []UniqueNameProvider) error
106113
}
107114

108115
// Init will run the initialize method for all of provides and aggregate the errors.
109-
func (mp *MultiProvider) Init(evalCtx of.EvaluationContext) error {
116+
func (mp *MultiProvider) Init(evalCtx openfeature.EvaluationContext) error {
110117
var wg sync.WaitGroup
111118
errChan := make(chan err.StateErr, len(mp.providersEntries))
112119

113120
for _, provider := range mp.providersEntries {
114121
wg.Add(1)
115122
go func(p UniqueNameProvider) {
116123
defer wg.Done()
117-
if stateHandle, ok := p.Provider.(of.StateHandler); ok {
124+
if stateHandle, ok := p.Provider.(openfeature.StateHandler); ok {
118125
if initErr := stateHandle.Init(evalCtx); initErr != nil {
119-
errChan <- err.StateErr{ProviderName: p.Name, Err: initErr}
126+
errChan <- err.StateErr{ProviderName: p.UniqueName, Err: initErr}
120127
}
121128
}
122129
}(provider)
@@ -141,8 +148,8 @@ func (mp *MultiProvider) Init(evalCtx of.EvaluationContext) error {
141148
return nil
142149
}
143150

144-
func (mp *MultiProvider) Status() of.State {
145-
return of.ReadyState
151+
func (mp *MultiProvider) Status() openfeature.State {
152+
return openfeature.ReadyState
146153
}
147154

148155
func (mp *MultiProvider) Shutdown() {
@@ -152,7 +159,7 @@ func (mp *MultiProvider) Shutdown() {
152159
wg.Add(1)
153160
go func(p UniqueNameProvider) {
154161
defer wg.Done()
155-
if stateHandle, ok := p.Provider.(of.StateHandler); ok {
162+
if stateHandle, ok := p.Provider.(openfeature.StateHandler); ok {
156163
stateHandle.Shutdown()
157164
}
158165
}(provider)
@@ -161,7 +168,7 @@ func (mp *MultiProvider) Shutdown() {
161168
wg.Wait()
162169
}
163170

164-
func (mp *MultiProvider) EventChannel() <-chan of.Event {
165-
ev := make(chan of.Event)
171+
func (mp *MultiProvider) EventChannel() <-chan openfeature.Event {
172+
ev := make(chan openfeature.Event)
166173
return ev
167174
}

0 commit comments

Comments
 (0)