package sdk import ( "encoding/json" "strconv" "strings" ) func asString(v any) string { if v == nil { return "" } switch x := v.(type) { case string: return x case json.Number: return x.String() default: return strings.TrimSpace(fmtSprint(v)) } } func fmtSprint(v any) string { b, err := json.Marshal(v) if err != nil { return "" } return strings.Trim(string(b), `"`) } func asFloat(v any) float64 { if v == nil { return 0 } switch x := v.(type) { case float64: return x case float32: return float64(x) case int: return float64(x) case int64: return float64(x) case json.Number: f, _ := x.Float64() return f case string: f, _ := strconv.ParseFloat(strings.TrimSpace(x), 64) return f default: f, _ := strconv.ParseFloat(asString(v), 64) return f } } func mapField(m map[string]any, names ...string) any { for _, name := range names { if v, ok := m[name]; ok && v != nil { return v } } return nil }