stardb/converter_safe.go
2026-03-07 19:27:44 +08:00

69 lines
1.4 KiB
Go

package stardb
import (
"fmt"
"strconv"
"time"
)
// ConvertToInt64Safe converts any value to int64 with error handling
func ConvertToInt64Safe(val interface{}) (int64, error) {
switch v := val.(type) {
case nil:
return 0, nil
case int:
return int64(v), nil
case int32:
return int64(v), nil
case int64:
return v, nil
case uint64:
return int64(v), nil
case float32:
return int64(v), nil
case float64:
return int64(v), nil
case string:
return strconv.ParseInt(v, 10, 64)
case bool:
if v {
return 1, nil
}
return 0, nil
case time.Time:
return v.Unix(), nil
case []byte:
return strconv.ParseInt(string(v), 10, 64)
default:
return 0, fmt.Errorf("cannot convert %T to int64", val)
}
}
// ConvertToStringSafe converts any value to string with error handling
func ConvertToStringSafe(val interface{}) (string, error) {
switch v := val.(type) {
case nil:
return "", nil
case string:
return v, nil
case int:
return strconv.Itoa(v), nil
case int32:
return strconv.FormatInt(int64(v), 10), nil
case int64:
return strconv.FormatInt(v, 10), nil
case float32:
return strconv.FormatFloat(float64(v), 'f', -1, 32), nil
case float64:
return strconv.FormatFloat(v, 'f', -1, 64), nil
case bool:
return strconv.FormatBool(v), nil
case time.Time:
return v.String(), nil
case []byte:
return string(v), nil
default:
return "", fmt.Errorf("cannot convert %T to string", val)
}
}