From 5a6986a8c539364b7a166abdfb608b3cc00ecb3b Mon Sep 17 00:00:00 2001 From: historia <[not public]> Date: Mon, 13 Jul 2026 23:01:45 -0400 Subject: feat(admin): convert players page into characters page with basic stats/yaml --- internal/admin/api_helpers.go | 34 ++++++++++++++++++++++++++++++++-- 1 file changed, 32 insertions(+), 2 deletions(-) (limited to 'internal/admin/api_helpers.go') diff --git a/internal/admin/api_helpers.go b/internal/admin/api_helpers.go index 78e59d4..109bca6 100644 --- a/internal/admin/api_helpers.go +++ b/internal/admin/api_helpers.go @@ -2,19 +2,49 @@ package admin import ( "bytes" + "fmt" "os" "gopkg.in/yaml.v3" ) func yamlToMap(data []byte) (map[string]any, error) { - var m map[string]any - if err := yaml.Unmarshal(data, &m); err != nil { + 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) -- cgit v1.2.3