64 lines
970 B
Go
64 lines
970 B
Go
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
|
|
}
|