func createTypedSettings()

in internal/loader/typed_setting.go [17:80]


func createTypedSettings(rawSettings *RawSettings, dataOptions *acpv1.ConfigMapDataOptions) (map[string]string, error) {
	result := make(map[string]string)
	if len(rawSettings.KeyValueSettings) == 0 && rawSettings.FeatureFlagSettings == nil {
		return result, nil
	}

	if dataOptions == nil || dataOptions.Type == acpv1.Default || dataOptions.Type == acpv1.Properties {
		tmpSettings := make(map[string]string)
		for k, v := range rawSettings.KeyValueSettings {
			if v != nil {
				tmpSettings[k] = *v
			} else {
				klog.Warningf("value of the setting '%s' is null, just ignore it", k)
			}
		}

		if dataOptions == nil || dataOptions.Type == acpv1.Default {
			return tmpSettings, nil
		}

		result[dataOptions.Key] = marshalProperties(tmpSettings)
		return result, nil
	}
	// dataOptions.Type = json or yaml
	root := &Tree{}
	parsedSettings := make(map[string]interface{})
	for k, v := range rawSettings.KeyValueSettings {
		var value interface{} = nil
		if v != nil {
			value = *v
			if rawSettings.IsJsonContentTypeMap[k] {
				var out interface{}
				err := json.Unmarshal([]byte(*v), &out)
				if err != nil {
					return nil, fmt.Errorf("failed to unmarshal json value for key '%s': %s", k, err.Error())
				}
				value = out
			}
		}

		if dataOptions.Separator != nil {
			root.insert(strings.Split(k, string(*dataOptions.Separator)), value)
		} else {
			parsedSettings[k] = value
		}
	}

	if dataOptions.Separator != nil {
		parsedSettings = root.build()
	}

	if rawSettings.FeatureFlagSettings != nil {
		// FeatureManagementSection = {"feature_management": { "feature_flags" : [{...}, {...}]}
		parsedSettings[FeatureManagementSectionName] = rawSettings.FeatureFlagSettings
	}

	if typedStr, err := marshalJsonYaml(parsedSettings, dataOptions); err != nil {
		return nil, err
	} else {
		result[dataOptions.Key] = typedStr
	}

	return result, nil
}