88 lines
1.8 KiB
Go
88 lines
1.8 KiB
Go
package main
|
|
|
|
import (
|
|
"regexp"
|
|
"strconv"
|
|
"strings"
|
|
)
|
|
|
|
var types = map[string]string{
|
|
"ascii": "string",
|
|
"bigint": "int64",
|
|
"blob": "[]byte",
|
|
"boolean": "bool",
|
|
"counter": "int",
|
|
"date": "time.Time",
|
|
"decimal": "inf.Dec",
|
|
"double": "float64",
|
|
"duration": "gocql.Duration",
|
|
"float": "float32",
|
|
"inet": "string",
|
|
"int": "int32",
|
|
"smallint": "int16",
|
|
"text": "string",
|
|
"time": "time.Duration",
|
|
"timestamp": "time.Time",
|
|
"timeuuid": "[16]byte",
|
|
"tinyint": "int8",
|
|
"uuid": "[16]byte",
|
|
"varchar": "string",
|
|
"varint": "int64",
|
|
}
|
|
|
|
func mapScyllaToGoType(s string) string {
|
|
frozenRegex := regexp.MustCompile(`frozen<([a-z]*)>`)
|
|
match := frozenRegex.FindAllStringSubmatch(s, -1)
|
|
if match != nil {
|
|
s = match[0][1]
|
|
}
|
|
|
|
mapRegex := regexp.MustCompile(`map<([a-z]*), ([a-z]*)>`)
|
|
setRegex := regexp.MustCompile(`set<([a-z]*)>`)
|
|
listRegex := regexp.MustCompile(`list<([a-z]*)>`)
|
|
tupleRegex := regexp.MustCompile(`tuple<(?:([a-z]*),? ?)*>`)
|
|
match = mapRegex.FindAllStringSubmatch(s, -1)
|
|
if match != nil {
|
|
key := match[0][1]
|
|
value := match[0][2]
|
|
|
|
return "map[" + types[key] + "]" + types[value]
|
|
}
|
|
|
|
match = setRegex.FindAllStringSubmatch(s, -1)
|
|
if match != nil {
|
|
key := match[0][1]
|
|
|
|
return "[]" + types[key]
|
|
}
|
|
|
|
match = listRegex.FindAllStringSubmatch(s, -1)
|
|
if match != nil {
|
|
key := match[0][1]
|
|
|
|
return "[]" + types[key]
|
|
}
|
|
|
|
match = tupleRegex.FindAllStringSubmatch(s, -1)
|
|
if match != nil {
|
|
tuple := match[0][0]
|
|
subStr := tuple[6 : len(tuple)-1]
|
|
types := strings.Split(subStr, ", ")
|
|
|
|
typeStr := "struct {\n"
|
|
for i, t := range types {
|
|
typeStr += "\t\tField" + strconv.Itoa(i+1) + " " + mapScyllaToGoType(t) + "\n"
|
|
}
|
|
typeStr += "\t}"
|
|
|
|
return typeStr
|
|
}
|
|
|
|
t, exists := types[s]
|
|
if exists {
|
|
return t
|
|
}
|
|
|
|
return camelize(s) + "UserType"
|
|
}
|