func unmarshalConfigMap()

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
}