@@ -98,17 +98,7 @@ func InitializeWithConfig(conf AmplitudeConfig, deploymentKey string) {
98
98
}
99
99
}
100
100
101
- func contains (s []string , e string ) bool {
102
- for _ , a := range s {
103
- if a == e {
104
- return true
105
- }
106
- }
107
- return false
108
- }
109
-
110
- func fetch (flagKeys []string , user UserProperties , valueOnly bool ) map [string ]interface {} {
111
- variants := make (map [string ]interface {})
101
+ func fetch (user UserProperties ) (* local.EvaluationResult , error ) {
112
102
userProp := map [string ]interface {}{
113
103
"org_id" : user .OrgId ,
114
104
"org_name" : user .OrgName ,
@@ -127,71 +117,61 @@ func fetch(flagKeys []string, user UserProperties, valueOnly bool) map[string]in
127
117
128
118
result , err := client .EvaluateByOrg (& expUser )
129
119
if err != nil {
130
- return variants
120
+ return nil , err
121
+ }
122
+ return result , nil
123
+ }
124
+
125
+ func getValue (flagName string , user UserProperties ) local.EvaluationVariant {
126
+ result , err := fetch (user )
127
+ if err != nil {
128
+ fmt .Errorf ("error in fetch: %s" , err .Error ())
129
+ }
130
+ if result != nil {
131
+ if value , ok := (* result )[flagName ]; ok {
132
+ return value .Variant
133
+ }
134
+ }
135
+ return local.EvaluationVariant {}
136
+ }
137
+
138
+ func getMapOfValue (user UserProperties ) map [string ]interface {} {
139
+ flags := make (map [string ]interface {})
140
+ result , err := fetch (user )
141
+ if err != nil {
142
+ fmt .Errorf ("error in fetch: %s" , err .Error ())
131
143
}
132
- filter := len (flagKeys ) != 0
133
144
for k , v := range * result {
134
145
if v .IsDefaultVariant {
135
146
continue
136
147
}
137
- if ! filter {
138
- if valueOnly {
139
- variants [k ] = v .Variant .Key
140
- } else {
141
- variants [k ] = AmplitudeVariant {
142
- Value : v .Variant .Key ,
143
- Payload : v .Variant .Payload ,
144
- }
145
- }
146
- continue
147
- }
148
- if contains (flagKeys , k ) {
149
- if valueOnly {
150
- variants [k ] = v .Variant .Key
151
- } else {
152
- variants [k ] = AmplitudeVariant {
153
- Value : v .Variant .Key ,
154
- Payload : v .Variant .Payload ,
155
- }
156
- }
157
- }
148
+ flags [k ] = v .Variant .Key
158
149
}
159
- return variants
150
+ return flags
160
151
}
161
152
162
153
func GetFeatureFlagString (flagName string , user UserProperties ) string {
163
- flagKeys := []string {flagName }
164
- data := fetch (flagKeys , user , false )
165
- if flagData , ok := data [flagName ].(AmplitudeVariant ); ok {
166
- return flagData .Value
167
- }
168
- return ""
154
+ data := getValue (flagName , user )
155
+ return data .Key
169
156
}
170
157
171
158
func GetFeatureFlagBool (flagName string , user UserProperties ) bool {
172
- flagKeys := []string {flagName }
173
- data := fetch (flagKeys , user , false )
174
- if flagData , ok := data [flagName ].(AmplitudeVariant ); ok {
175
- if val , err := strconv .ParseBool (flagData .Value ); err == nil {
176
- return val
177
- }
159
+ data := getValue (flagName , user )
160
+ if val , err := strconv .ParseBool (data .Key ); err == nil {
161
+ return val
178
162
}
179
163
return false
180
164
}
181
165
182
166
func GetFeatureFlagPayload (flagName string , user UserProperties ) map [string ]interface {} {
183
- flagKeys := []string {flagName }
184
- data := fetch (flagKeys , user , false )
167
+ data := getValue (flagName , user )
185
168
mapData := make (map [string ]interface {})
186
- if flagData , ok := data [flagName ].(AmplitudeVariant ); ok {
187
- mapData ["value" ] = flagData .Value
188
- mapData ["payload" ] = flagData .Payload
189
- }
169
+ mapData ["value" ] = data .Key
170
+ mapData ["payload" ] = data .Payload
190
171
return mapData
191
172
}
192
173
193
174
func GetFeatureFlagByOrg (user UserProperties ) map [string ]interface {} {
194
- flagKeys := []string {}
195
- data := fetch (flagKeys , user , true )
175
+ data := getMapOfValue (user )
196
176
return data
197
177
}
0 commit comments