package admin import ( "bytes" "fmt" "os" "gopkg.in/yaml.v3" ) func yamlToMap(data []byte) (map[string]any, error) { var v any if err := yaml.Unmarshal(data, &v); err != nil { return nil, err } m, ok := stringifyMap(v).(map[string]any) if !ok { return nil, fmt.Errorf("yaml root is not a map") } return m, nil } func stringifyMap(v any) any { switch val := v.(type) { case map[interface{}]interface{}: out := make(map[string]any, len(val)) for k, v := range val { out[fmt.Sprint(k)] = stringifyMap(v) } return out case map[string]interface{}: out := make(map[string]any, len(val)) for k, v := range val { out[k] = stringifyMap(v) } return out case []interface{}: out := make([]any, len(val)) for i, e := range val { out[i] = stringifyMap(e) } return out default: return v } } func writeMapAsYAML(path string, m map[string]any) ([]byte, error) { var buf bytes.Buffer enc := yaml.NewEncoder(&buf) enc.SetIndent(2) if err := enc.Encode(m); err != nil { return nil, err } enc.Close() content := buf.Bytes() if err := os.WriteFile(path, content, 0644); err != nil { return nil, err } return content, nil }