in internal/loader/typed_setting.go [110:139]
func unmarshalConfigMap(existingConfigMapSetting *map[string]string, dataOptions *acpv1.ConfigMapDataOptions) (map[string]interface{}, map[string]interface{}, error) {
var existingConfigMapData string
var ok bool
if existingConfigMapData, ok = (*existingConfigMapSetting)[dataOptions.Key]; !ok {
return nil, nil, fmt.Errorf("failed to get data for key '%s' from configMap", dataOptions.Key)
}
keyValueSettings := make(map[string]interface{})
var featureFlagSection map[string]interface{}
switch dataOptions.Type {
case acpv1.Yaml:
err := yaml.Unmarshal([]byte(existingConfigMapData), &keyValueSettings)
if err != nil {
return nil, nil, err
}
case acpv1.Json:
err := json.Unmarshal([]byte(existingConfigMapData), &keyValueSettings)
if err != nil {
return nil, nil, err
}
default:
return nil, nil, fmt.Errorf("unsupported data type '%s', only supports json/yaml for now", dataOptions.Type)
}
if featureFlagSection, ok = keyValueSettings[FeatureManagementSectionName].(map[string]interface{}); !ok {
return nil, nil, fmt.Errorf("failed to get feature flags from configMap data '%s'", existingConfigMapData)
}
delete(keyValueSettings, FeatureManagementSectionName)
return featureFlagSection, keyValueSettings, nil
}