You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@thrift.apache.org by "Stanislav Baranov (JIRA)" <ji...@apache.org> on 2017/05/10 14:01:04 UTC

[jira] [Created] (THRIFT-4195) Compilation to GO produces broken code

Stanislav Baranov created THRIFT-4195:
-----------------------------------------

             Summary: Compilation to GO produces broken code
                 Key: THRIFT-4195
                 URL: https://issues.apache.org/jira/browse/THRIFT-4195
             Project: Thrift
          Issue Type: Bug
          Components: Go - Compiler
    Affects Versions: 0.10.0
         Environment: MacOS 10.12.4 (16E195)
go version go1.8.1 darwin/amd64
            Reporter: Stanislav Baranov
            Priority: Critical


Sample source file:

{code}
namespace go reports

typedef string ReportState
const ReportState ReportStateQueued = "QUEUED";
const ReportState ReportStateCalculating = "CALCULATING";
const ReportState ReportStateImporting = "IMPORTING";
const ReportState ReportStateFinished = "FINISHED";
const ReportState ReportStateFailed = "FAILED";

struct ReportFilter {
    1: i64 quantity,
    2: i64 dataVersion,
    3: string subscriptionID,
    4: optional string principalID,
    5: optional string createdOn,
    6: optional list<ReportState> states,
}
{code}

after compilation as:

{{thrift -r -v -o ./ -out ./go --gen go:package_prefix="git.4tree.de/" ./sample.thrift}}

Produces code which contains:

{code}
func (p *ReportFilter)  ReadField6(iprot thrift.TProtocol) error {
  _, size, err := iprot.ReadListBegin()
  if err != nil {
    return thrift.PrependError("error reading list begin: ", err)
  }
  tSlice := make([]ReportState, 0, size)
  p.States =  tSlice
  for i := 0; i < size; i ++ {
var _elem0 string
    if v, err := iprot.ReadString(); err != nil {
    return thrift.PrependError("error reading field 0: ", err)
} else {
    _elem0 = v
}
    p.States = append(p.States, _elem0)
  }
  if err := iprot.ReadListEnd(); err != nil {
    return thrift.PrependError("error reading list end: ", err)
  }
  return nil
}
{code}

When trying to compile this code, GO triggers an error:

{{cannot use _elem0 (type string) as type ReportState in append
}}

This code compiles normal using  thrift 0.9.3



--
This message was sent by Atlassian JIRA
(v6.3.15#6346)