in codegen/thrift.go [31:82]
func GoType(p PackageNameResolver, spec compile.TypeSpec) (string, error) {
switch s := spec.(type) {
case *compile.BoolSpec:
return "bool", nil
case *compile.I8Spec:
return "int8", nil
case *compile.I16Spec:
return "int16", nil
case *compile.I32Spec:
return "int32", nil
case *compile.I64Spec:
return "int64", nil
case *compile.DoubleSpec:
return "float64", nil
case *compile.StringSpec:
return "string", nil
case *compile.BinarySpec:
return "[]byte", nil
case *compile.MapSpec:
k, err := GoReferenceType(p, s.KeySpec)
if err != nil {
return "", err
}
v, err := GoReferenceType(p, s.ValueSpec)
if err != nil {
return "", err
}
if !isHashable(s.KeySpec) {
return fmt.Sprintf("[]struct{Key %s; Value %s}", k, v), nil
}
return fmt.Sprintf("map[%s]%s", k, v), nil
case *compile.ListSpec:
v, err := GoReferenceType(p, s.ValueSpec)
if err != nil {
return "", err
}
return "[]" + v, nil
case *compile.SetSpec:
v, err := GoReferenceType(p, s.ValueSpec)
if err != nil {
return "", err
}
if !isHashable(s.ValueSpec) || isSliceSetType(s) {
return fmt.Sprintf("[]%s", v), nil
}
return fmt.Sprintf("map[%s]struct{}", v), nil
case *compile.EnumSpec, *compile.StructSpec, *compile.TypedefSpec:
return GoCustomType(p, spec)
default:
panic(fmt.Sprintf("Unknown type (%T) for %s", spec, spec.ThriftName()))
}
}