package main // getString extracts a string value from content map. func getString(content map[string]any, key string) string { if v, ok := content[key].(string); ok { return v } return "" } // getBool extracts a bool value from content map. Defaults to defaultVal. func getBool(content map[string]any, key string, defaultVal bool) bool { if v, ok := content[key].(bool); ok { return v } return defaultVal } // getSlice extracts a slice of maps from content. func getSlice(content map[string]any, key string) []map[string]any { if v, ok := content[key].([]any); ok { result := make([]map[string]any, 0, len(v)) for _, item := range v { if m, ok := item.(map[string]any); ok { result = append(result, m) } } return result } return nil } // getNumberSlice extracts a slice of numbers from content. Handles JSON float64. func getNumberSlice(content map[string]any, key string) []float64 { if v, ok := content[key].([]any); ok { result := make([]float64, 0, len(v)) for _, item := range v { switch n := item.(type) { case float64: result = append(result, n) case int: result = append(result, float64(n)) } } return result } return nil }