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
}