54 lines
1.1 KiB
Go
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
|
|
}
|