Files
2026-09-19 18:26:07 +03:00

54 lines
1.1 KiB
Go

package tron
import (
"encoding/json"
"fmt"
"strconv"
)
// ValueString coerces a decoded JSON value to a string. It handles the
// json.Number type produced when decoding with UseNumber so large integers are
// preserved exactly.
func ValueString(v any) string {
switch x := v.(type) {
case nil:
return ""
case string:
return x
case json.Number:
return x.String()
case float64:
return strconv.FormatFloat(x, 'f', -1, 64)
case bool:
if x {
return "true"
}
return "false"
default:
return fmt.Sprintf("%v", x)
}
}
// ValueInt64 coerces a decoded JSON value to an int64. Missing or non-numeric
// values yield 0, matching Python's treatment of absent dict keys.
func ValueInt64(v any) int64 {
switch x := v.(type) {
case json.Number:
if i, err := x.Int64(); err == nil {
return i
}
f, _ := x.Float64()
return int64(f)
case float64:
return int64(x)
case int64:
return x
case int:
return int64(x)
case string:
i, _ := strconv.ParseInt(x, 10, 64)
return i
}
return 0
}