...

Source file src/github.com/growthbook/growthbook-golang/feature_rule.go

Documentation: github.com/growthbook/growthbook-golang

     1  package growthbook
     2  
     3  // FeatureRule overrides the default value of a Feature.
     4  type FeatureRule struct {
     5  	ID            string
     6  	Condition     Condition
     7  	Force         FeatureValue
     8  	Variations    []FeatureValue
     9  	Weights       []float64
    10  	Key           string
    11  	HashAttribute string
    12  	HashVersion   int
    13  	Range         *Range
    14  	Coverage      *float64
    15  	Namespace     *Namespace
    16  	Ranges        []Range
    17  	Meta          []VariationMeta
    18  	Filters       []Filter
    19  	Seed          string
    20  	Name          string
    21  	Phase         string
    22  }
    23  
    24  // BuildFeatureRule creates an FeatureRule value from a generic JSON
    25  // value.
    26  func BuildFeatureRule(val interface{}) *FeatureRule {
    27  	rule := FeatureRule{}
    28  	dict, ok := val.(map[string]interface{})
    29  	if !ok {
    30  		logError("Invalid JSON data type", "FeatureRule")
    31  		return nil
    32  	}
    33  	for k, v := range dict {
    34  		switch k {
    35  		case "id":
    36  			id, ok := jsonString(v, "FeatureRule", "id")
    37  			if !ok {
    38  				return nil
    39  			}
    40  			rule.ID = id
    41  		case "condition":
    42  			condmap, ok := v.(map[string]interface{})
    43  			if !ok {
    44  				logError("Invalid JSON data type", "FeatureRule", "condition")
    45  				return nil
    46  			}
    47  			condition := BuildCondition(condmap)
    48  			if condition == nil {
    49  				return nil
    50  			}
    51  			rule.Condition = condition
    52  		case "force":
    53  			rule.Force = v
    54  		case "variations":
    55  			variations := BuildFeatureValues(v)
    56  			if variations == nil {
    57  				return nil
    58  			}
    59  			rule.Variations = variations
    60  		case "weights":
    61  			weights, ok := jsonFloatArray(v, "FeatureRule", "weights")
    62  			if !ok {
    63  				return nil
    64  			}
    65  			rule.Weights = weights
    66  		case "key":
    67  			key, ok := jsonString(v, "FeatureRule", "key")
    68  			if !ok {
    69  				return nil
    70  			}
    71  			rule.Key = key
    72  		case "hashAttribute":
    73  			hashAttribute, ok := jsonString(v, "FeatureRule", "hashAttribute")
    74  			if !ok {
    75  				return nil
    76  			}
    77  			rule.HashAttribute = hashAttribute
    78  		case "hashVersion":
    79  			hashVersion, ok := jsonInt(v, "FeatureRule", "hashVersion")
    80  			if !ok {
    81  				return nil
    82  			}
    83  			rule.HashVersion = hashVersion
    84  		case "range":
    85  			rng, ok := jsonRange(v, "FeatureRule", "range")
    86  			if !ok {
    87  				return nil
    88  			}
    89  			rule.Range = rng
    90  		case "coverage":
    91  			coverage, ok := jsonMaybeFloat(v, "FeatureRule", "coverage")
    92  			if !ok {
    93  				return nil
    94  			}
    95  			rule.Coverage = coverage
    96  		case "namespace":
    97  			namespace := BuildNamespace(v)
    98  			if namespace == nil {
    99  				return nil
   100  			}
   101  			rule.Namespace = namespace
   102  		case "ranges":
   103  			ranges, ok := jsonRangeArray(v, "FeatureRule", "ranges")
   104  			if !ok {
   105  				return nil
   106  			}
   107  			rule.Ranges = ranges
   108  		case "meta":
   109  			meta, ok := jsonVariationMetaArray(v, "Experiment", "meta")
   110  			if !ok {
   111  				return nil
   112  			}
   113  			rule.Meta = meta
   114  		case "filters":
   115  			filters, ok := jsonFilterArray(v, "Experiment", "filters")
   116  			if !ok {
   117  				return nil
   118  			}
   119  			rule.Filters = filters
   120  		case "seed":
   121  			seed, ok := jsonString(v, "FeatureRule", "seed")
   122  			if !ok {
   123  				return nil
   124  			}
   125  			rule.Seed = seed
   126  		case "name":
   127  			name, ok := jsonString(v, "FeatureRule", "name")
   128  			if !ok {
   129  				return nil
   130  			}
   131  			rule.Name = name
   132  		case "phase":
   133  			phase, ok := jsonString(v, "FeatureRule", "phase")
   134  			if !ok {
   135  				return nil
   136  			}
   137  			rule.Phase = phase
   138  		default:
   139  			logWarn("Unknown key in JSON data", "FeatureRule", k)
   140  		}
   141  	}
   142  	return &rule
   143  }
   144  

View as plain text