@@ -2,7 +2,6 @@ package openfeature
2
2
3
3
import (
4
4
"fmt"
5
- "reflect"
6
5
"sync"
7
6
"time"
8
7
@@ -68,13 +67,6 @@ type eventPayload struct {
68
67
handler FeatureProvider
69
68
}
70
69
71
- // providerReference is a helper struct to store FeatureProvider with EventHandler capability along with their
72
- // shutdown semaphore
73
- type providerReference struct {
74
- featureProvider FeatureProvider
75
- shutdownSemaphore chan interface {}
76
- }
77
-
78
70
// AddHandler adds an API(global) level handler
79
71
func (e * eventExecutor ) AddHandler (t EventType , c EventCallback ) {
80
72
e .mu .Lock ()
@@ -217,14 +209,7 @@ func (e *eventExecutor) registerDefaultProvider(provider FeatureProvider) error
217
209
e .mu .Lock ()
218
210
defer e .mu .Unlock ()
219
211
220
- // register shutdown semaphore for new default provider
221
- sem := make (chan interface {})
222
-
223
- newProvider := providerReference {
224
- featureProvider : provider ,
225
- shutdownSemaphore : sem ,
226
- }
227
-
212
+ newProvider := newProviderRef (provider )
228
213
oldProvider := e .defaultProviderReference
229
214
e .defaultProviderReference = newProvider
230
215
@@ -235,14 +220,7 @@ func (e *eventExecutor) registerDefaultProvider(provider FeatureProvider) error
235
220
func (e * eventExecutor ) registerNamedEventingProvider (associatedClient string , provider FeatureProvider ) error {
236
221
e .mu .Lock ()
237
222
defer e .mu .Unlock ()
238
-
239
- // register shutdown semaphore for new named provider
240
- sem := make (chan interface {})
241
-
242
- newProvider := providerReference {
243
- featureProvider : provider ,
244
- shutdownSemaphore : sem ,
245
- }
223
+ newProvider := newProviderRef (provider )
246
224
247
225
oldProvider := e .namedProviderReference [associatedClient ]
248
226
e .namedProviderReference [associatedClient ] = newProvider
@@ -288,7 +266,7 @@ func (e *eventExecutor) startListeningAndShutdownOld(newProvider providerReferen
288
266
289
267
// drop from active references
290
268
for i , r := range e .activeSubscriptions {
291
- if reflect . DeepEqual ( oldReference .featureProvider , r . featureProvider ) {
269
+ if oldReference .equals ( r ) {
292
270
e .activeSubscriptions = append (e .activeSubscriptions [:i ], e .activeSubscriptions [i + 1 :]... )
293
271
}
294
272
}
@@ -332,8 +310,7 @@ func (e *eventExecutor) triggerEvent(event Event, handler FeatureProvider) {
332
310
333
311
// then run client handlers
334
312
for domain , reference := range e .namedProviderReference {
335
- if ! reflect .DeepEqual (reference .featureProvider , handler ) {
336
- // unassociated client, continue to next
313
+ if ! reference .equals (newProviderRef (handler )) {
337
314
continue
338
315
}
339
316
@@ -343,7 +320,7 @@ func (e *eventExecutor) triggerEvent(event Event, handler FeatureProvider) {
343
320
}
344
321
}
345
322
346
- if ! reflect . DeepEqual ( e .defaultProviderReference .featureProvider , handler ) {
323
+ if ! e .defaultProviderReference .equals ( newProviderRef ( handler ) ) {
347
324
return
348
325
}
349
326
@@ -386,25 +363,23 @@ func (e *eventExecutor) executeHandler(f func(details EventDetails), event Event
386
363
// isRunning is a helper till we bump to the latest go version with slices.contains support
387
364
func isRunning (provider providerReference , activeProviders []providerReference ) bool {
388
365
for _ , activeProvider := range activeProviders {
389
- if reflect . DeepEqual ( activeProvider .featureProvider , provider . featureProvider ) {
366
+ if activeProvider .equals ( provider ) {
390
367
return true
391
368
}
392
369
}
393
-
394
370
return false
395
371
}
396
372
397
373
// isRunning is a helper to check if given provider is already in use
398
374
func isBound (provider providerReference , defaultProvider providerReference , namedProviders []providerReference ) bool {
399
- if reflect . DeepEqual ( provider .featureProvider , defaultProvider . featureProvider ) {
375
+ if provider .equals ( defaultProvider ) {
400
376
return true
401
377
}
402
378
403
379
for _ , namedProvider := range namedProviders {
404
- if reflect . DeepEqual ( provider .featureProvider , namedProvider . featureProvider ) {
380
+ if provider .equals ( namedProvider ) {
405
381
return true
406
382
}
407
383
}
408
-
409
384
return false
410
385
}
0 commit comments