diff options
| author | historia <[not public]> | 2026-07-13 23:01:45 -0400 |
|---|---|---|
| committer | historia <[not public]> | 2026-07-13 23:01:45 -0400 |
| commit | 5a6986a8c539364b7a166abdfb608b3cc00ecb3b (patch) | |
| tree | 0a8a199fa28173df7f97493a209b5642ef7b4817 /internal/admin/api_helpers.go | |
| parent | 5ea48c1f91298b42924f6865ffc30810cceec2d3 (diff) | |
| download | thehouseoficarus-5a6986a8c539364b7a166abdfb608b3cc00ecb3b.tar.gz | |
feat(admin): convert players page into characters page with basic stats/yaml
Diffstat (limited to 'internal/admin/api_helpers.go')
| -rw-r--r-- | internal/admin/api_helpers.go | 34 |
1 files changed, 32 insertions, 2 deletions
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) |
