69 lines
1.4 KiB
Go
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)
|
|
}
|
|
}
|