in cassandra-bigtable-migration-tools/cassandra-bigtable-proxy/responsehandler/responsehandler_utils.go [324:368]
func HandlePrimitiveEncoding(dt datatype.DataType, value interface{}, protocalVersion primitive.ProtocolVersion, encode bool) (interface{}, error) {
val := reflect.ValueOf(value)
if !val.IsValid() {
return value, nil
}
if val.Kind() == reflect.Slice {
if val.Len() == 0 {
return value, nil
}
}
var decodedValue interface{}
var err error
if dt == datatype.Boolean {
decodedValue, err = decodeAndReturnBool(value, protocalVersion)
} else if dt == datatype.Int {
decodedValue, err = decodeAndReturnInt(value, protocalVersion)
} else if dt == datatype.Bigint || dt == datatype.Timestamp {
decodedValue, err = decodeAndReturnBigInt(value, protocalVersion)
} else if dt == datatype.Float {
decodedValue, err = decodeAndReturnFloat(value, protocalVersion)
} else if dt == datatype.Double {
decodedValue, err = decodeAndReturnDouble(value, protocalVersion)
} else if dt == datatype.Varchar {
byteArray, okByte := value.([]byte)
stringValue, okString := value.(string)
if !okByte && !okString {
return nil, fmt.Errorf("value is not a byte array or string")
}
if okByte {
decodedValue = string(byteArray)
} else {
decodedValue = stringValue
}
} else {
return nil, fmt.Errorf("unsupported primitive type: %s", dt.String())
}
if err != nil {
return nil, err
}
if encode {
encoded, _ := proxycore.EncodeType(dt, protocalVersion, decodedValue)
return encoded, nil
}
return decodedValue, nil
}