aboutsummaryrefslogtreecommitdiff
path: root/internal/admin/api_helpers.go
diff options
context:
space:
mode:
authorhistoria <[not public]>2026-07-13 23:01:45 -0400
committerhistoria <[not public]>2026-07-13 23:01:45 -0400
commit5a6986a8c539364b7a166abdfb608b3cc00ecb3b (patch)
tree0a8a199fa28173df7f97493a209b5642ef7b4817 /internal/admin/api_helpers.go
parent5ea48c1f91298b42924f6865ffc30810cceec2d3 (diff)
downloadthehouseoficarus-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.go34
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)