@@ -21,6 +21,7 @@ import (
2121 "crypto/hmac"
2222 "crypto/sha256"
2323 "encoding/base64"
24+ "encoding/json"
2425 "fmt"
2526)
2627
@@ -143,7 +144,43 @@ type ClusterClaimInfo struct {
143144}
144145
145146type ClusterClaimFeatures struct {
146- EnabledFeatures []string `json:"enabledFeatures,omitempty" protobuf:"bytes,1,rep,name=enabledFeatures"`
147- ExternallyManagedFeatures []string `json:"externallyManagedFeatures,omitempty" protobuf:"bytes,2,rep,name=externallyManagedFeatures"`
148- DisabledFeatures []string `json:"disabledFeatures,omitempty" protobuf:"bytes,3,rep,name=disabledFeatures"`
147+ EnabledFeatures map [string ]string `json:"enabledFeatures,omitempty" protobuf:"bytes,1,opt,name=enabledFeatures"`
148+ ExternallyManagedFeatures []string `json:"externallyManagedFeatures,omitempty" protobuf:"bytes,2,opt,name=externallyManagedFeatures"`
149+ DisabledFeatures []string `json:"disabledFeatures,omitempty" protobuf:"bytes,3,opt,name=disabledFeatures"`
150+ }
151+
152+ func (f * ClusterClaimFeatures ) UnmarshalJSON (data []byte ) error {
153+ aux := & struct {
154+ EnabledFeatures any `json:"enabledFeatures,omitempty"`
155+ ExternallyManagedFeatures []string `json:"externallyManagedFeatures,omitempty"`
156+ DisabledFeatures []string `json:"disabledFeatures,omitempty"`
157+ }{}
158+
159+ if err := json .Unmarshal (data , aux ); err != nil {
160+ return err
161+ }
162+
163+ f .EnabledFeatures = toStringMap (aux .EnabledFeatures )
164+ f .ExternallyManagedFeatures = aux .ExternallyManagedFeatures
165+ f .DisabledFeatures = aux .DisabledFeatures
166+ return nil
167+ }
168+
169+ func toStringMap (v any ) map [string ]string {
170+ result := make (map [string ]string )
171+ switch val := v .(type ) {
172+ case []any :
173+ for _ , item := range val {
174+ if str , ok := item .(string ); ok {
175+ result [str ] = ""
176+ }
177+ }
178+ case map [string ]any :
179+ for k , item := range val {
180+ if str , ok := item .(string ); ok {
181+ result [k ] = str
182+ }
183+ }
184+ }
185+ return result
149186}
0 commit comments