@@ -23,22 +23,14 @@ import (
2323)
2424
2525const (
26- treatment = "Treatment"
27- treatments = "Treatments"
28- treatmentsByFlagSet = "TreatmentsByFlagSet"
29- treatmentsByFlagSets = "TreatmentsByFlagSets"
30- treatmentWithConfig = "TreatmentWithConfig"
31- treatmentsWithConfig = "TreatmentsWithConfig"
32- treatmentsWithConfigByFlagSet = "TreatmentsWithConfigByFlagSet"
33- treatmentsWithConfigByFlagSets = "TreatmentsWithConfigByFlagSets"
34- treatmentWithEvaluationOptions = "TreatmentWithEvaluationOptions"
35- treatmentsWithEvaluationOptions = "TreatmentsWithEvaluationOptions"
36- treatmentsByFlagSetWithEvaluationOptions = "TreatmentsByFlagSetWithEvaluationOptions"
37- treatmentsByFlagSetsWithEvaluationOptions = "TreatmentsByFlagSetsWithEvaluationOptions"
38- treatmentWithConfigAndEvaluationOptions = "TreatmentWithConfigWithEvaluationOptions"
39- treatmentsWithConfigAndEvaluationOptions = "TreatmentsWithConfigWithEvaluationOptions"
40- treatmentsWithConfigByFlagSetAndEvaluationOptions = "TreatmentsWithConfigByFlagSetWithEvaluationOptions"
41- treatmentsWithConfigByFlagSetsAndEvaluationOptions = "TreatmentsWithConfigByFlagSetsWithEvaluationOptions"
26+ treatment = "Treatment"
27+ treatments = "Treatments"
28+ treatmentsByFlagSet = "TreatmentsByFlagSet"
29+ treatmentsByFlagSets = "TreatmentsByFlagSets"
30+ treatmentWithConfig = "TreatmentWithConfig"
31+ treatmentsWithConfig = "TreatmentsWithConfig"
32+ treatmentsWithConfigByFlagSet = "TreatmentsWithConfigByFlagSet"
33+ treatmentsWithConfigByFlagSets = "TreatmentsWithConfigByFlagSets"
4234)
4335
4436// SplitClient is the entry-point of the split SDK.
@@ -63,6 +55,22 @@ type TreatmentResult struct {
6355 Config * string `json:"config"`
6456}
6557
58+ type options struct {
59+ evaluationOptions * dtos.EvaluationOptions
60+ }
61+
62+ type OptFn = func (o * options )
63+
64+ func (c * SplitClient ) WithEvaluationOptions (e * dtos.EvaluationOptions ) OptFn {
65+ return func (o * options ) { o .evaluationOptions = e }
66+ }
67+
68+ func defaultOpts () options {
69+ return options {
70+ evaluationOptions : nil ,
71+ }
72+ }
73+
6674// getEvaluationResult calls evaluation for one particular feature flag
6775func (c * SplitClient ) getEvaluationResult (matchingKey string , bucketingKey * string , featureFlag string , attributes map [string ]interface {}, operation string ) * evaluator.Result {
6876 if c .isReady () {
@@ -224,26 +232,24 @@ func serializeProperties(opts *dtos.EvaluationOptions) string {
224232
225233// Treatment implements the main functionality of split. Retrieve treatments of a specific feature flag
226234// for a certain key and set of attributes
227- func (c * SplitClient ) Treatment (key interface {}, featureFlagName string , attributes map [string ]interface {}) string {
228- return c .doTreatmentCall (key , featureFlagName , attributes , treatment , telemetry .Treatment , nil ).Treatment
235+ func (c * SplitClient ) Treatment (key interface {}, featureFlagName string , attributes map [string ]interface {}, optFns ... OptFn ) string {
236+ options := getOptions (optFns ... )
237+ return c .doTreatmentCall (key , featureFlagName , attributes , treatment , telemetry .Treatment , options .evaluationOptions ).Treatment
229238}
230239
231- // TreatmentWithConfig implements the main functionality of split. Retrieves the treatment of a specific feature flag
232- // with the corresponding configuration if it is present
233- func (c * SplitClient ) TreatmentWithConfig (key interface {}, featureFlagName string , attributes map [string ]interface {}) TreatmentResult {
234- return c .doTreatmentCall (key , featureFlagName , attributes , treatmentWithConfig , telemetry .TreatmentWithConfig , nil )
235- }
236-
237- // TreatmentWithEvaluationOptions implements the main functionality of split. Retrieve treatments of a specific feature flag
238- // for a certain key and set of attributes
239- func (c * SplitClient ) TreatmentWithEvaluationOptions (key interface {}, featureFlagName string , attributes map [string ]interface {}, evaluationOptions dtos.EvaluationOptions ) string {
240- return c .doTreatmentCall (key , featureFlagName , attributes , treatmentWithEvaluationOptions , telemetry .TreatmentWithEvaluationOptions , & evaluationOptions ).Treatment
240+ func getOptions (optFns ... OptFn ) options {
241+ options := defaultOpts ()
242+ for _ , optFn := range optFns {
243+ optFn (& options )
244+ }
245+ return options
241246}
242247
243- // TreatmentWithConfigAndEvaluationOptions implements the main functionality of split. Retrieves the treatment of a specific feature flag
248+ // TreatmentWithConfig implements the main functionality of split. Retrieves the treatment of a specific feature flag
244249// with the corresponding configuration if it is present
245- func (c * SplitClient ) TreatmentWithConfigAndEvaluationOptions (key interface {}, featureFlagName string , attributes map [string ]interface {}, evaluationOptions dtos.EvaluationOptions ) TreatmentResult {
246- return c .doTreatmentCall (key , featureFlagName , attributes , treatmentWithConfigAndEvaluationOptions , telemetry .TreatmentWithConfigAndEvaluationOptions , & evaluationOptions )
250+ func (c * SplitClient ) TreatmentWithConfig (key interface {}, featureFlagName string , attributes map [string ]interface {}, optFns ... OptFn ) TreatmentResult {
251+ options := getOptions (optFns ... )
252+ return c .doTreatmentCall (key , featureFlagName , attributes , treatmentWithConfig , telemetry .TreatmentWithConfig , options .evaluationOptions )
247253}
248254
249255// Generates control treatments
@@ -357,19 +363,10 @@ func (c *SplitClient) doTreatmentsCallByFlagSets(key interface{}, flagSets []str
357363}
358364
359365// Treatments evaluates multiple feature flag names for a single user and set of attributes at once
360- func (c * SplitClient ) Treatments (key interface {}, featureFlagNames []string , attributes map [string ]interface {}) map [string ]string {
366+ func (c * SplitClient ) Treatments (key interface {}, featureFlagNames []string , attributes map [string ]interface {}, optFns ... OptFn ) map [string ]string {
367+ options := getOptions (optFns ... )
361368 treatmentsResult := map [string ]string {}
362- result := c .doTreatmentsCall (key , featureFlagNames , attributes , treatments , telemetry .Treatments , nil )
363- for feature , treatmentResult := range result {
364- treatmentsResult [feature ] = treatmentResult .Treatment
365- }
366- return treatmentsResult
367- }
368-
369- // TreatmentsWithEvaluationOptions evaluates multiple feature flag names for a single user and set of attributes at once
370- func (c * SplitClient ) TreatmentsWithEvaluationOptions (key interface {}, featureFlagNames []string , attributes map [string ]interface {}, evaluationOptions dtos.EvaluationOptions ) map [string ]string {
371- treatmentsResult := map [string ]string {}
372- result := c .doTreatmentsCall (key , featureFlagNames , attributes , treatmentsWithEvaluationOptions , telemetry .TreatmentsWithEvaluationOptions , & evaluationOptions )
369+ result := c .doTreatmentsCall (key , featureFlagNames , attributes , treatments , telemetry .Treatments , options .evaluationOptions )
373370 for feature , treatmentResult := range result {
374371 treatmentsResult [feature ] = treatmentResult .Treatment
375372 }
@@ -397,55 +394,29 @@ func (c *SplitClient) validateSets(flagSets []string) []string {
397394}
398395
399396// Treatments evaluate multiple feature flag names belonging to a flag set for a single user and a set of attributes at once
400- func (c * SplitClient ) TreatmentsByFlagSet (key interface {}, flagSet string , attributes map [string ]interface {}) map [string ]string {
397+ func (c * SplitClient ) TreatmentsByFlagSet (key interface {}, flagSet string , attributes map [string ]interface {}, optFns ... OptFn ) map [string ]string {
398+ options := getOptions (optFns ... )
401399 treatmentsResult := map [string ]string {}
402400 sets := c .validateSets ([]string {flagSet })
403401 if sets == nil {
404402 return treatmentsResult
405403 }
406- result := c .doTreatmentsCallByFlagSets (key , sets , attributes , treatmentsByFlagSet , telemetry .TreatmentsByFlagSet , nil )
404+ result := c .doTreatmentsCallByFlagSets (key , sets , attributes , treatmentsByFlagSet , telemetry .TreatmentsByFlagSet , options . evaluationOptions )
407405 for feature , treatmentResult := range result {
408406 treatmentsResult [feature ] = treatmentResult .Treatment
409407 }
410408 return treatmentsResult
411409}
412410
413411// Treatments evaluate multiple feature flag names belonging to flag sets for a single user and a set of attributes at once
414- func (c * SplitClient ) TreatmentsByFlagSets (key interface {}, flagSets []string , attributes map [string ]interface {}) map [string ]string {
415- treatmentsResult := map [string ]string {}
416- flagSets = c .validateSets (flagSets )
417- if flagSets == nil {
418- return treatmentsResult
419- }
420- result := c .doTreatmentsCallByFlagSets (key , flagSets , attributes , treatmentsByFlagSets , telemetry .TreatmentsByFlagSets , nil )
421- for feature , treatmentResult := range result {
422- treatmentsResult [feature ] = treatmentResult .Treatment
423- }
424- return treatmentsResult
425- }
426-
427- // TreatmentsByFlagSetWithEvaluationOptions evaluate multiple feature flag names belonging to a flag set for a single user and a set of attributes at once
428- func (c * SplitClient ) TreatmentsByFlagSetWithEvaluationOptions (key interface {}, flagSet string , attributes map [string ]interface {}, evaluationOptions dtos.EvaluationOptions ) map [string ]string {
429- treatmentsResult := map [string ]string {}
430- sets := c .validateSets ([]string {flagSet })
431- if sets == nil {
432- return treatmentsResult
433- }
434- result := c .doTreatmentsCallByFlagSets (key , sets , attributes , treatmentsByFlagSetWithEvaluationOptions , telemetry .TreatmentsByFlagSetWithEvaluationOptions , & evaluationOptions )
435- for feature , treatmentResult := range result {
436- treatmentsResult [feature ] = treatmentResult .Treatment
437- }
438- return treatmentsResult
439- }
440-
441- // TreatmentsByFlagSetsWithEvaluationOptions evaluate multiple feature flag names belonging to flag sets for a single user and a set of attributes at once
442- func (c * SplitClient ) TreatmentsByFlagSetsWithEvaluationOptions (key interface {}, flagSets []string , attributes map [string ]interface {}, evaluationOptions dtos.EvaluationOptions ) map [string ]string {
412+ func (c * SplitClient ) TreatmentsByFlagSets (key interface {}, flagSets []string , attributes map [string ]interface {}, optFns ... OptFn ) map [string ]string {
413+ options := getOptions (optFns ... )
443414 treatmentsResult := map [string ]string {}
444415 flagSets = c .validateSets (flagSets )
445416 if flagSets == nil {
446417 return treatmentsResult
447418 }
448- result := c .doTreatmentsCallByFlagSets (key , flagSets , attributes , treatmentsByFlagSetsWithEvaluationOptions , telemetry .TreatmentsByFlagSetsWithEvaluationOptions , & evaluationOptions )
419+ result := c .doTreatmentsCallByFlagSets (key , flagSets , attributes , treatmentsByFlagSets , telemetry .TreatmentsByFlagSets , options . evaluationOptions )
449420 for feature , treatmentResult := range result {
450421 treatmentsResult [feature ] = treatmentResult .Treatment
451422 }
@@ -465,53 +436,31 @@ func (c *SplitClient) filterSetsAreInConfig(flagSets []string) []string {
465436}
466437
467438// TreatmentsWithConfig evaluates multiple feature flag names for a single user and set of attributes at once and returns configurations
468- func (c * SplitClient ) TreatmentsWithConfig (key interface {}, featureFlagNames []string , attributes map [string ]interface {}) map [string ]TreatmentResult {
469- return c .doTreatmentsCall (key , featureFlagNames , attributes , treatmentsWithConfig , telemetry .TreatmentsWithConfig , nil )
470- }
471-
472- // TreatmentsWithConfigAndEvaluationOptions evaluates multiple feature flag names for a single user and set of attributes at once and returns configurations
473- func (c * SplitClient ) TreatmentsWithConfigAndEvaluationOptions (key interface {}, featureFlagNames []string , attributes map [string ]interface {}, evaluationOptions dtos.EvaluationOptions ) map [string ]TreatmentResult {
474- return c .doTreatmentsCall (key , featureFlagNames , attributes , treatmentsWithConfigAndEvaluationOptions , telemetry .TreatmentsWithConfigByFlagSetAndEvaluationOptions , & evaluationOptions )
439+ func (c * SplitClient ) TreatmentsWithConfig (key interface {}, featureFlagNames []string , attributes map [string ]interface {}, optFns ... OptFn ) map [string ]TreatmentResult {
440+ options := getOptions (optFns ... )
441+ return c .doTreatmentsCall (key , featureFlagNames , attributes , treatmentsWithConfig , telemetry .TreatmentsWithConfig , options .evaluationOptions )
475442}
476443
477444// TreatmentsWithConfigByFlagSet evaluates multiple feature flag names belonging to a flag set for a single user and set of attributes at once and returns configurations
478- func (c * SplitClient ) TreatmentsWithConfigByFlagSet (key interface {}, flagSet string , attributes map [string ]interface {}) map [string ]TreatmentResult {
479- treatmentsResult := make (map [string ]TreatmentResult )
480- sets := c .validateSets ([]string {flagSet })
481- if sets == nil {
482- return treatmentsResult
483- }
484- return c .doTreatmentsCallByFlagSets (key , sets , attributes , treatmentsWithConfigByFlagSet , telemetry .TreatmentsWithConfigByFlagSet , nil )
485- }
486-
487- // TreatmentsWithConfigByFlagSetAndEvaluationOptions evaluates multiple feature flag names belonging to a flag set for a single user and set of attributes at once and returns configurations
488- func (c * SplitClient ) TreatmentsWithConfigByFlagSetAndEvaluationOptions (key interface {}, flagSet string , attributes map [string ]interface {}, evaluationOptions dtos.EvaluationOptions ) map [string ]TreatmentResult {
445+ func (c * SplitClient ) TreatmentsWithConfigByFlagSet (key interface {}, flagSet string , attributes map [string ]interface {}, optFns ... OptFn ) map [string ]TreatmentResult {
446+ options := getOptions (optFns ... )
489447 treatmentsResult := make (map [string ]TreatmentResult )
490448 sets := c .validateSets ([]string {flagSet })
491449 if sets == nil {
492450 return treatmentsResult
493451 }
494- return c .doTreatmentsCallByFlagSets (key , sets , attributes , treatmentsWithConfigByFlagSetAndEvaluationOptions , telemetry .TreatmentsWithConfigByFlagSetAndEvaluationOptions , & evaluationOptions )
452+ return c .doTreatmentsCallByFlagSets (key , sets , attributes , treatmentsWithConfigByFlagSet , telemetry .TreatmentsWithConfigByFlagSet , options . evaluationOptions )
495453}
496454
497455// TreatmentsWithConfigByFlagSet evaluates multiple feature flag names belonging to a flag sets for a single user and set of attributes at once and returns configurations
498- func (c * SplitClient ) TreatmentsWithConfigByFlagSets (key interface {}, flagSets []string , attributes map [string ]interface {}) map [string ]TreatmentResult {
499- treatmentsResult := make (map [string ]TreatmentResult )
500- flagSets = c .validateSets (flagSets )
501- if flagSets == nil {
502- return treatmentsResult
503- }
504- return c .doTreatmentsCallByFlagSets (key , flagSets , attributes , treatmentsWithConfigByFlagSets , telemetry .TreatmentsWithConfigByFlagSets , nil )
505- }
506-
507- // TreatmentsWithConfigByFlagSetsAndEvaluationOptions evaluates multiple feature flag names belonging to a flag sets for a single user and set of attributes at once and returns configurations
508- func (c * SplitClient ) TreatmentsWithConfigByFlagSetsAndEvaluationOptions (key interface {}, flagSets []string , attributes map [string ]interface {}, evaluationOptions dtos.EvaluationOptions ) map [string ]TreatmentResult {
456+ func (c * SplitClient ) TreatmentsWithConfigByFlagSets (key interface {}, flagSets []string , attributes map [string ]interface {}, optFns ... OptFn ) map [string ]TreatmentResult {
457+ options := getOptions (optFns ... )
509458 treatmentsResult := make (map [string ]TreatmentResult )
510459 flagSets = c .validateSets (flagSets )
511460 if flagSets == nil {
512461 return treatmentsResult
513462 }
514- return c .doTreatmentsCallByFlagSets (key , flagSets , attributes , treatmentsWithConfigByFlagSetsAndEvaluationOptions , telemetry .TreatmentsWithConfigByFlagSetsAndEvaluationOptions , & evaluationOptions )
463+ return c .doTreatmentsCallByFlagSets (key , flagSets , attributes , treatmentsWithConfigByFlagSets , telemetry .TreatmentsWithConfigByFlagSets , options . evaluationOptions )
515464}
516465
517466// isDestroyed returns true if the client has been destroyed
0 commit comments