|
@@ -12,6 +12,7 @@ import (
|
|
|
"os"
|
|
"os"
|
|
|
"path/filepath"
|
|
"path/filepath"
|
|
|
"strings"
|
|
"strings"
|
|
|
|
|
+ "math"
|
|
|
)
|
|
)
|
|
|
|
|
|
|
|
var (
|
|
var (
|
|
@@ -142,11 +143,22 @@ func serializeValueToSv(prefix string, value any) {
|
|
|
serializeMapToSv(prefix, m)
|
|
serializeMapToSv(prefix, m)
|
|
|
} else if s, ok := value.([]any); ok { // if value is a slice we need to flatten it
|
|
} else if s, ok := value.([]any); ok { // if value is a slice we need to flatten it
|
|
|
serializeSliceToSv(prefix, s)
|
|
serializeSliceToSv(prefix, s)
|
|
|
|
|
+ } else if f, ok := value.(float64); ok {
|
|
|
|
|
+ if canConvertToInt64(f) {
|
|
|
|
|
+ s := int64(f)
|
|
|
|
|
+ sv.Set(prefix, fmt.Sprintf("%d", s))
|
|
|
|
|
+ } else {
|
|
|
|
|
+ sv.Set(prefix, fmt.Sprintf("%f", f))
|
|
|
|
|
+ }
|
|
|
} else {
|
|
} else {
|
|
|
sv.Set(prefix, fmt.Sprintf("%v", value))
|
|
sv.Set(prefix, fmt.Sprintf("%v", value))
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+func canConvertToInt64(f float64) bool {
|
|
|
|
|
+ return f >= math.MinInt64 && f <= math.MaxInt64 && f == math.Trunc(f)
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
func serializeMapToSv(prefix string, m map[string]any) {
|
|
func serializeMapToSv(prefix string, m map[string]any) {
|
|
|
for k, v := range m {
|
|
for k, v := range m {
|
|
|
serializeValueToSv(prefix+"."+k, v)
|
|
serializeValueToSv(prefix+"."+k, v)
|