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) } }