THRIFT-2866: Go - generator code readability enhanced
Client: Go
Patch: Chi Vinh Le
This closes #295
diff --git a/compiler/cpp/src/generate/t_go_generator.cc b/compiler/cpp/src/generate/t_go_generator.cc
index 0c8dd00..691684a 100644
--- a/compiler/cpp/src/generate/t_go_generator.cc
+++ b/compiler/cpp/src/generate/t_go_generator.cc
@@ -795,10 +795,14 @@
std::string tenum_name(publicize(tenum->get_name()));
generate_go_docstring(f_types_, tenum);
f_types_ << "type " << tenum_name << " int64" << endl << "const (" << endl;
- to_string_mapping << indent() << "func (p " << tenum_name << ") String() string {" << endl
- << indent() << " switch p {" << endl;
+
+ to_string_mapping << indent() << "func (p " << tenum_name << ") String() string {" << endl;
+ to_string_mapping << indent() << " switch p {" << endl;
+
from_string_mapping << indent() << "func " << tenum_name << "FromString(s string) (" << tenum_name
- << ", error) {" << endl << indent() << " switch s {" << endl;
+ << ", error) {" << endl;
+ from_string_mapping << indent() << " switch s {" << endl;
+
vector<t_enum_value*> constants = tenum->get_constants();
vector<t_enum_value*>::iterator c_iter;
int value = -1;
@@ -824,12 +828,13 @@
}
}
- to_string_mapping << indent() << " }" << endl << indent() << " return \"<UNSET>\"" << endl
- << indent() << "}" << endl;
- from_string_mapping << indent() << " }" << endl << indent() << " return " << tenum_name
- << "(0),"
- << " fmt.Errorf(\"not a valid " << tenum_name << " string\")" << endl
- << indent() << "}" << endl;
+ to_string_mapping << indent() << " }" << endl;
+ to_string_mapping << indent() << " return \"<UNSET>\"" << endl;
+ to_string_mapping << indent() << "}" << endl;
+ from_string_mapping << indent() << " }" << endl;
+ from_string_mapping << indent() << " return " << tenum_name << "(0),"
+ << " fmt.Errorf(\"not a valid " << tenum_name << " string\")" << endl;
+ from_string_mapping << indent() << "}" << endl;
f_types_ << ")" << endl << endl << to_string_mapping.str() << endl << from_string_mapping.str()
<< endl << endl;
@@ -1130,8 +1135,9 @@
}
indent_down();
- out << indent() << "}" << endl << endl << indent() << "func New" << tstruct_name << "() *"
- << tstruct_name << " {" << endl << indent() << " return &";
+ out << indent() << "}" << endl << endl;
+ out << indent() << "func New" << tstruct_name << "() *" << tstruct_name << " {" << endl;
+ out << indent() << " return &";
generate_go_struct_initializer(out, tstruct, is_result || is_args);
out << indent() << "}" << endl << endl;
// Default values for optional fields
@@ -1153,14 +1159,18 @@
string goOptType = type_to_go_type_with_opt(fieldType, true);
string maybepointer = goOptType != goType ? "*" : "";
out << indent() << "func (p *" << tstruct_name << ") Get" << publicized_name << "() "
- << goType << " {" << endl << indent() << " if !p.IsSet" << publicized_name << "() {"
- << endl << indent() << " return " << def_var_name << endl << indent() << " }" << endl
- << indent() << "return " << maybepointer << "p." << publicized_name << endl << indent()
- << "}" << endl;
+ << goType << " {" << endl;
+ out << indent() << " if !p.IsSet" << publicized_name << "() {" << endl;
+ out << indent() << " return " << def_var_name << endl;
+ out << indent() << " }" << endl;
+ out << indent() << "return " << maybepointer << "p." << publicized_name << endl;
+ out << indent() << "}" << endl;
} else {
- out << endl << indent() << "func (p *" << tstruct_name << ") Get" << publicized_name << "() "
- << goType << " {" << endl << indent() << "return p." << publicized_name << endl
- << indent() << "}" << endl;
+ out << endl;
+ out << indent() << "func (p *" << tstruct_name << ") Get" << publicized_name << "() "
+ << goType << " {" << endl;
+ out << indent() << " return p." << publicized_name << endl;
+ out << indent() << "}" << endl;
}
}
@@ -1168,14 +1178,18 @@
generate_go_struct_reader(out, tstruct, tstruct_name, is_result);
generate_go_struct_writer(out, tstruct, tstruct_name, is_result);
- out << indent() << "func (p *" << tstruct_name << ") String() string {" << endl << indent()
- << " if p == nil {" << endl << indent() << " return \"<nil>\"" << endl << indent()
- << " }" << endl << indent() << " return fmt.Sprintf(\"" << escape_string(tstruct_name)
- << "(%+v)\", *p)" << endl << indent() << "}" << endl << endl;
+ out << indent() << "func (p *" << tstruct_name << ") String() string {" << endl;
+ out << indent() << " if p == nil {" << endl;
+ out << indent() << " return \"<nil>\"" << endl;
+ out << indent() << " }" << endl;
+ out << indent() << " return fmt.Sprintf(\"" << escape_string(tstruct_name) << "(%+v)\", *p)"
+ << endl;
+ out << indent() << "}" << endl << endl;
if (is_exception) {
- out << indent() << "func (p *" << tstruct_name << ") Error() string {" << endl << indent()
- << " return p.String()" << endl << indent() << "}" << endl << endl;
+ out << indent() << "func (p *" << tstruct_name << ") Error() string {" << endl;
+ out << indent() << " return p.String()" << endl;
+ out << indent() << "}" << endl << endl;
}
}
@@ -1233,17 +1247,19 @@
out << indent() << "func (p *" << tstruct_name << ") Read(iprot thrift.TProtocol) error {"
<< endl;
indent_up();
- out << indent() << "if _, err := iprot.ReadStructBegin(); err != nil {" << endl << indent()
- << " return thrift.PrependError(fmt.Sprintf(\"%T read error: \", p), err)" << endl
- << indent() << "}" << endl;
+ out << indent() << "if _, err := iprot.ReadStructBegin(); err != nil {" << endl;
+ out << indent() << " return thrift.PrependError(fmt.Sprintf(\"%T read error: \", p), err)"
+ << endl;
+ out << indent() << "}" << endl;
// Loop over reading in fields
indent(out) << "for {" << endl;
indent_up();
// Read beginning field marker
- out << indent() << "_, fieldTypeId, fieldId, err := iprot.ReadFieldBegin()" << endl << indent()
- << "if err != nil {" << endl << indent()
- << " return thrift.PrependError(fmt.Sprintf(\"%T field %d read error: \", p, fieldId), err)"
- << endl << indent() << "}" << endl;
+ out << indent() << "_, fieldTypeId, fieldId, err := iprot.ReadFieldBegin()" << endl;
+ out << indent() << "if err != nil {" << endl;
+ out << indent() << " return thrift.PrependError(fmt.Sprintf("
+ "\"%T field %d read error: \", p, fieldId), err)" << endl;
+ out << indent() << "}" << endl;
// Check for field STOP marker and break
out << indent() << "if fieldTypeId == thrift.STOP { break; }" << endl;
@@ -1278,7 +1294,9 @@
}
out << indent() << "if err := p." << field_method_prefix << field_id << "(iprot); err != nil {"
- << endl << indent() << " return err" << endl << indent() << "}" << endl;
+ << endl;
+ out << indent() << " return err" << endl;
+ out << indent() << "}" << endl;
indent_down();
}
@@ -1289,8 +1307,9 @@
}
// Skip unknown fields in either case
- out << indent() << "if err := iprot.Skip(fieldTypeId); err != nil {" << endl << indent()
- << " return err" << endl << indent() << "}" << endl;
+ out << indent() << "if err := iprot.Skip(fieldTypeId); err != nil {" << endl;
+ out << indent() << " return err" << endl;
+ out << indent() << "}" << endl;
// End switch default case
if (have_switch) {
@@ -1299,13 +1318,16 @@
}
// Read field end marker
- out << indent() << "if err := iprot.ReadFieldEnd(); err != nil {" << endl << indent()
- << " return err" << endl << indent() << "}" << endl;
+ out << indent() << "if err := iprot.ReadFieldEnd(); err != nil {" << endl;
+ out << indent() << " return err" << endl;
+ out << indent() << "}" << endl;
indent_down();
- out << indent() << "}" << endl << indent() << "if err := iprot.ReadStructEnd(); err != nil {"
- << endl << indent()
- << " return thrift.PrependError(fmt.Sprintf(\"%T read struct end error: \", p), err)" << endl
- << indent() << "}" << endl << indent() << "return nil" << endl;
+ out << indent() << "}" << endl;
+ out << indent() << "if err := iprot.ReadStructEnd(); err != nil {" << endl;
+ out << indent() << " return thrift.PrependError(fmt.Sprintf("
+ "\"%T read struct end error: \", p), err)" << endl;
+ out << indent() << "}" << endl;
+ out << indent() << "return nil" << endl;
indent_down();
out << indent() << "}" << endl << endl;
@@ -1325,7 +1347,8 @@
indent_up();
generate_deserialize_field(out, *f_iter, false, "p.");
indent_down();
- out << indent() << " return nil" << endl << indent() << "}" << endl << endl;
+ out << indent() << " return nil" << endl;
+ out << indent() << "}" << endl << endl;
}
}
@@ -1339,10 +1362,9 @@
vector<t_field*>::const_iterator f_iter;
indent(out) << "func (p *" << tstruct_name << ") Write(oprot thrift.TProtocol) error {" << endl;
indent_up();
- out << indent() << "if err := oprot.WriteStructBegin(\"" << name << "\"); err != nil {" << endl
- << indent()
- << " return thrift.PrependError(fmt.Sprintf(\"%T write struct begin error: \", p), err) }"
- << endl;
+ out << indent() << "if err := oprot.WriteStructBegin(\"" << name << "\"); err != nil {" << endl;
+ out << indent() << " return thrift.PrependError(fmt.Sprintf("
+ "\"%T write struct begin error: \", p), err) }" << endl;
string field_name;
string escape_field_name;
@@ -1366,11 +1388,11 @@
}
// Write the struct map
- out << indent() << "if err := oprot.WriteFieldStop(); err != nil {" << endl << indent()
- << " return thrift.PrependError(\"write field stop error: \", err) }" << endl << indent()
- << "if err := oprot.WriteStructEnd(); err != nil {" << endl << indent()
- << " return thrift.PrependError(\"write struct stop error: \", err) }" << endl << indent()
- << "return nil" << endl;
+ out << indent() << "if err := oprot.WriteFieldStop(); err != nil {" << endl;
+ out << indent() << " return thrift.PrependError(\"write field stop error: \", err) }" << endl;
+ out << indent() << "if err := oprot.WriteStructEnd(); err != nil {" << endl;
+ out << indent() << " return thrift.PrependError(\"write struct stop error: \", err) }" << endl;
+ out << indent() << "return nil" << endl;
indent_down();
out << indent() << "}" << endl << endl;
@@ -1398,17 +1420,17 @@
}
out << indent() << "if err := oprot.WriteFieldBegin(\"" << escape_field_name << "\", "
- << type_to_enum((*f_iter)->get_type()) << ", " << field_id << "); err != nil {" << endl
- << indent() << " return thrift.PrependError(fmt.Sprintf(\"%T write field begin error "
+ << type_to_enum((*f_iter)->get_type()) << ", " << field_id << "); err != nil {" << endl;
+ out << indent() << " return thrift.PrependError(fmt.Sprintf(\"%T write field begin error "
<< field_id << ":" << escape_field_name << ": \", p), err) }" << endl;
// Write field contents
generate_serialize_field(out, *f_iter, "p.");
// Write field closer
- out << indent() << "if err := oprot.WriteFieldEnd(); err != nil {" << endl << indent()
- << " return thrift.PrependError(fmt.Sprintf(\"%T write field end error " << field_id << ":"
- << escape_field_name << ": \", p), err) }" << endl;
+ out << indent() << "if err := oprot.WriteFieldEnd(); err != nil {" << endl;
+ out << indent() << " return thrift.PrependError(fmt.Sprintf(\"%T write field end error "
+ << field_id << ":" << escape_field_name << ": \", p), err) }" << endl;
if (field_required == t_field::T_OPTIONAL) {
indent_down();
@@ -1416,7 +1438,8 @@
}
indent_down();
- out << indent() << " return err" << endl << indent() << "}" << endl << endl;
+ out << indent() << " return err" << endl;
+ out << indent() << "}" << endl << endl;
}
}
@@ -1577,12 +1600,12 @@
if (!extends_client.empty()) {
f_service_ << indent() << "*" << extends_client << endl;
} else {
- f_service_ << indent() << "Transport thrift.TTransport" << endl << indent()
- << "ProtocolFactory thrift.TProtocolFactory" << endl << indent()
- << "InputProtocol thrift.TProtocol" << endl << indent()
- << "OutputProtocol thrift.TProtocol" << endl << indent() << "SeqId int32"
- << endl /*<<
- indent() << "reqs map[int32]Deferred" << endl*/;
+ f_service_ << indent() << "Transport thrift.TTransport" << endl;
+ f_service_ << indent() << "ProtocolFactory thrift.TProtocolFactory" << endl;
+ f_service_ << indent() << "InputProtocol thrift.TProtocol" << endl;
+ f_service_ << indent() << "OutputProtocol thrift.TProtocol" << endl;
+ f_service_ << indent() << "SeqId int32" << endl;
+ /*f_service_ << indent() << "reqs map[int32]Deferred" << endl*/;
}
indent_down();
@@ -1598,11 +1621,12 @@
f_service_ << "{" << extends_field << ": " << extends_client_new << "Factory(t, f)}";
} else {
indent_up();
- f_service_ << "{Transport: t," << endl << indent() << "ProtocolFactory: f," << endl << indent()
- << "InputProtocol: f.GetProtocol(t)," << endl << indent()
- << "OutputProtocol: f.GetProtocol(t)," << endl << indent() << "SeqId: 0,"
- << endl /*<<
- indent() << "Reqs: make(map[int32]Deferred)" << endl*/;
+ f_service_ << "{Transport: t," << endl;
+ f_service_ << indent() << "ProtocolFactory: f," << endl;
+ f_service_ << indent() << "InputProtocol: f.GetProtocol(t)," << endl;
+ f_service_ << indent() << "OutputProtocol: f.GetProtocol(t)," << endl;
+ f_service_ << indent() << "SeqId: 0," << endl;
+ /*f_service_ << indent() << "Reqs: make(map[int32]Deferred)" << endl*/;
indent_down();
f_service_ << indent() << "}" << endl;
}
@@ -1622,10 +1646,12 @@
<< endl;
} else {
indent_up();
- f_service_ << "{Transport: t," << endl << indent() << "ProtocolFactory: nil," << endl
- << indent() << "InputProtocol: iprot," << endl << indent()
- << "OutputProtocol: oprot," << endl << indent() << "SeqId: 0," << endl /*<<
- indent() << "Reqs: make(map[int32]interface{})" << endl*/;
+ f_service_ << "{Transport: t," << endl;
+ f_service_ << indent() << "ProtocolFactory: nil," << endl;
+ f_service_ << indent() << "InputProtocol: iprot," << endl;
+ f_service_ << indent() << "OutputProtocol: oprot," << endl;
+ f_service_ << indent() << "SeqId: 0," << endl;
+ /*f_service_ << indent() << "Reqs: make(map[int32]interface{})" << endl*/;
indent_down();
f_service_ << indent() << "}" << endl;
}
@@ -1677,22 +1703,26 @@
}
indent_down();
- f_service_ << indent() << "}" << endl << endl << indent() << "func (p *" << serviceName
- << "Client) send" << function_signature(*f_iter) << "(err error) {" << endl;
+ f_service_ << indent() << "}" << endl << endl;
+ f_service_ << indent() << "func (p *" << serviceName << "Client) send"
+ << function_signature(*f_iter) << "(err error) {" << endl;
indent_up();
std::string argsname = publicize((*f_iter)->get_name() + "_args", true);
// Serialize the request header
- f_service_ << indent() << "oprot := p.OutputProtocol" << endl << indent() << "if oprot == nil {"
- << endl << indent() << " oprot = p.ProtocolFactory.GetProtocol(p.Transport)" << endl
- << indent() << " p.OutputProtocol = oprot" << endl << indent() << "}" << endl
- << indent() << "p.SeqId++" << endl << indent()
- << "if err = oprot.WriteMessageBegin(\"" << (*f_iter)->get_name() << "\", "
- << ((*f_iter)->is_oneway() ? "thrift.ONEWAY" : "thrift.CALL")
+ f_service_ << indent() << "oprot := p.OutputProtocol" << endl;
+ f_service_ << indent() << "if oprot == nil {" << endl;
+ f_service_ << indent() << " oprot = p.ProtocolFactory.GetProtocol(p.Transport)" << endl;
+ f_service_ << indent() << " p.OutputProtocol = oprot" << endl;
+ f_service_ << indent() << "}" << endl;
+ f_service_ << indent() << "p.SeqId++" << endl;
+ f_service_ << indent() << "if err = oprot.WriteMessageBegin(\"" << (*f_iter)->get_name()
+ << "\", " << ((*f_iter)->is_oneway() ? "thrift.ONEWAY" : "thrift.CALL")
<< ", p.SeqId); err != nil {" << endl;
indent_up();
- f_service_ << indent() << "return" << endl;
+ f_service_ << indent() << " return" << endl;
indent_down();
- f_service_ << indent() << "}" << endl << indent() << "args := " << argsname << "{" << endl;
+ f_service_ << indent() << "}" << endl;
+ f_service_ << indent() << "args := " << argsname << "{" << endl;
for (fld_iter = fields.begin(); fld_iter != fields.end(); ++fld_iter) {
f_service_ << indent() << publicize(variable_name_to_go_name((*fld_iter)->get_name()))
@@ -1703,14 +1733,15 @@
// Write to the stream
f_service_ << indent() << "if err = args.Write(oprot); err != nil {" << endl;
indent_up();
- f_service_ << indent() << "return" << endl;
+ f_service_ << indent() << " return" << endl;
indent_down();
- f_service_ << indent() << "}" << endl << indent()
- << "if err = oprot.WriteMessageEnd(); err != nil {" << endl;
+ f_service_ << indent() << "}" << endl;
+ f_service_ << indent() << "if err = oprot.WriteMessageEnd(); err != nil {" << endl;
indent_up();
- f_service_ << indent() << "return" << endl;
+ f_service_ << indent() << " return" << endl;
indent_down();
- f_service_ << indent() << "}" << endl << indent() << "return oprot.Flush()" << endl;
+ f_service_ << indent() << "}" << endl;
+ f_service_ << indent() << "return oprot.Flush()" << endl;
indent_down();
f_service_ << indent() << "}" << endl << endl;
@@ -1729,31 +1760,42 @@
// TODO(mcslee): Validate message reply here, seq ids etc.
string error(tmp("error"));
string error2(tmp("error"));
- f_service_ << indent() << "iprot := p.InputProtocol" << endl << indent()
- << "if iprot == nil {" << endl << indent()
- << " iprot = p.ProtocolFactory.GetProtocol(p.Transport)" << endl << indent()
- << " p.InputProtocol = iprot" << endl << indent() << "}" << endl << indent()
- << "_, mTypeId, seqId, err := iprot.ReadMessageBegin()" << endl << indent()
- << "if err != nil {" << endl << indent() << " return" << endl << indent() << "}"
- << endl << indent() << "if mTypeId == thrift.EXCEPTION {" << endl << indent()
- << " " << error
+ f_service_ << indent() << "iprot := p.InputProtocol" << endl;
+ f_service_ << indent() << "if iprot == nil {" << endl;
+ f_service_ << indent() << " iprot = p.ProtocolFactory.GetProtocol(p.Transport)" << endl;
+ f_service_ << indent() << " p.InputProtocol = iprot" << endl;
+ f_service_ << indent() << "}" << endl;
+ f_service_ << indent() << "_, mTypeId, seqId, err := iprot.ReadMessageBegin()" << endl;
+ f_service_ << indent() << "if err != nil {" << endl;
+ f_service_ << indent() << " return" << endl;
+ f_service_ << indent() << "}" << endl;
+ f_service_ << indent() << "if mTypeId == thrift.EXCEPTION {" << endl;
+ f_service_ << indent() << " " << error
<< " := thrift.NewTApplicationException(thrift.UNKNOWN_APPLICATION_EXCEPTION, "
- "\"Unknown Exception\")" << endl << indent() << " var " << error2 << " error"
- << endl << indent() << " " << error2 << ", err = " << error << ".Read(iprot)"
- << endl << indent() << " if err != nil {" << endl << indent() << " return"
- << endl << indent() << " }" << endl << indent()
- << " if err = iprot.ReadMessageEnd(); err != nil {" << endl << indent()
- << " return" << endl << indent() << " }" << endl << indent()
- << " err = " << error2 << endl << indent() << " return" << endl << indent()
- << "}" << endl << indent() << "if p.SeqId != seqId {" << endl << indent()
- << " err = thrift.NewTApplicationException(thrift.BAD_SEQUENCE_ID, \""
- << (*f_iter)->get_name() << " failed: out of sequence response\")" << endl
- << indent() << " return" << endl << indent() << "}" << endl << indent()
- << "result := " << resultname << "{}" << endl << indent()
- << "if err = result.Read(iprot); err != nil {" << endl << indent() << " return"
- << endl << indent() << "}" << endl << indent()
- << "if err = iprot.ReadMessageEnd(); err != nil {" << endl << indent()
- << " return" << endl << indent() << "}" << endl;
+ "\"Unknown Exception\")" << endl;
+ f_service_ << indent() << " var " << error2 << " error" << endl;
+ f_service_ << indent() << " " << error2 << ", err = " << error << ".Read(iprot)" << endl;
+ f_service_ << indent() << " if err != nil {" << endl;
+ f_service_ << indent() << " return" << endl;
+ f_service_ << indent() << " }" << endl;
+ f_service_ << indent() << " if err = iprot.ReadMessageEnd(); err != nil {" << endl;
+ f_service_ << indent() << " return" << endl;
+ f_service_ << indent() << " }" << endl;
+ f_service_ << indent() << " err = " << error2 << endl;
+ f_service_ << indent() << " return" << endl;
+ f_service_ << indent() << "}" << endl;
+ f_service_ << indent() << "if p.SeqId != seqId {" << endl;
+ f_service_ << indent() << " err = thrift.NewTApplicationException(thrift.BAD_SEQUENCE_ID, \""
+ << (*f_iter)->get_name() << " failed: out of sequence response\")" << endl;
+ f_service_ << indent() << " return" << endl;
+ f_service_ << indent() << "}" << endl;
+ f_service_ << indent() << "result := " << resultname << "{}" << endl;
+ f_service_ << indent() << "if err = result.Read(iprot); err != nil {" << endl;
+ f_service_ << indent() << " return" << endl;
+ f_service_ << indent() << "}" << endl;
+ f_service_ << indent() << "if err = iprot.ReadMessageEnd(); err != nil {" << endl;
+ f_service_ << indent() << " return" << endl;
+ f_service_ << indent() << "}" << endl;
t_struct* xs = (*f_iter)->get_xceptions();
const std::vector<t_field*>& xceptions = xs->get_members();
@@ -1763,9 +1805,10 @@
const std::string varname = variable_name_to_go_name((*x_iter)->get_name());
const std::string pubname = publicize(varname);
- f_service_ << indent() << "if result." << pubname << " != nil {" << endl << indent()
- << "err = result." << pubname << endl << indent() << "return " << endl
- << indent() << "}";
+ f_service_ << indent() << "if result." << pubname << " != nil {" << endl;
+ f_service_ << indent() << " err = result." << pubname << endl;
+ f_service_ << indent() << " return " << endl;
+ f_service_ << indent() << "}";
if ((x_iter + 1) != xceptions.end()) {
f_service_ << " else ";
@@ -1818,18 +1861,27 @@
service_module.replace(loc, 1, 1, '/');
}
- f_remote << go_autogen_comment() << indent() << "package main" << endl << endl << indent()
- << "import (" << endl << indent() << " \"flag\"" << endl << indent()
- << " \"fmt\"" << endl << indent() << " \"math\"" << endl << indent()
- << " \"net\"" << endl << indent() << " \"net/url\"" << endl << indent()
- << " \"os\"" << endl << indent() << " \"strconv\"" << endl << indent()
- << " \"strings\"" << endl << indent() << " \"" + gen_thrift_import_ + "\""
- << endl << indent() << " \"" << service_module << "\"" << endl << indent() << ")"
- << endl << indent() << endl << indent() << "func Usage() {" << endl << indent()
- << " fmt.Fprintln(os.Stderr, \"Usage of \", os.Args[0], \" [-h host:port] [-u url] "
- "[-f[ramed]] function [arg1 [arg2...]]:\")" << endl << indent()
- << " flag.PrintDefaults()" << endl << indent()
- << " fmt.Fprintln(os.Stderr, \"\\nFunctions:\")" << endl;
+ f_remote << go_autogen_comment();
+ f_remote << indent() << "package main" << endl << endl;
+ f_remote << indent() << "import (" << endl;
+ f_remote << indent() << " \"flag\"" << endl;
+ f_remote << indent() << " \"fmt\"" << endl;
+ f_remote << indent() << " \"math\"" << endl;
+ f_remote << indent() << " \"net\"" << endl;
+ f_remote << indent() << " \"net/url\"" << endl;
+ f_remote << indent() << " \"os\"" << endl;
+ f_remote << indent() << " \"strconv\"" << endl;
+ f_remote << indent() << " \"strings\"" << endl;
+ f_remote << indent() << " \"" + gen_thrift_import_ + "\"" << endl;
+ f_remote << indent() << " \"" << service_module << "\"" << endl;
+ f_remote << indent() << ")" << endl;
+ f_remote << indent() << endl;
+ f_remote << indent() << "func Usage() {" << endl;
+ f_remote << indent() << " fmt.Fprintln(os.Stderr, \"Usage of \", os.Args[0], \" "
+ "[-h host:port] [-u url] [-f[ramed]] function [arg1 [arg2...]]:\")"
+ << endl;
+ f_remote << indent() << " flag.PrintDefaults()" << endl;
+ f_remote << indent() << " fmt.Fprintln(os.Stderr, \"\\nFunctions:\")" << endl;
for (f_iter = functions.begin(); f_iter != functions.end(); ++f_iter) {
f_remote << " fmt.Fprintln(os.Stderr, \" " << (*f_iter)->get_returntype()->get_name() << " "
@@ -1853,71 +1905,111 @@
f_remote << ")\")" << endl;
}
- f_remote << indent() << " fmt.Fprintln(os.Stderr)" << endl << indent() << " os.Exit(0)" << endl
- << indent() << "}" << endl << indent() << endl << indent() << "func main() {" << endl;
+ f_remote << indent() << " fmt.Fprintln(os.Stderr)" << endl;
+ f_remote << indent() << " os.Exit(0)" << endl;
+ f_remote << indent() << "}" << endl;
+ f_remote << indent() << endl;
+ f_remote << indent() << "func main() {" << endl;
indent_up();
- f_remote
- << indent() << "flag.Usage = Usage" << endl << indent() << "var host string" << endl
- << indent() << "var port int" << endl << indent() << "var protocol string" << endl << indent()
- << "var urlString string" << endl << indent() << "var framed bool" << endl << indent()
- << "var useHttp bool" << endl << indent() << "var parsedUrl url.URL" << endl << indent()
- << "var trans thrift.TTransport" << endl << indent() << "_ = strconv.Atoi" << endl << indent()
- << "_ = math.Abs" << endl << indent() << "flag.Usage = Usage" << endl << indent()
- << "flag.StringVar(&host, \"h\", \"localhost\", \"Specify host and port\")" << endl
- << indent() << "flag.IntVar(&port, \"p\", 9090, \"Specify port\")" << endl << indent()
- << "flag.StringVar(&protocol, \"P\", \"binary\", \"Specify the protocol (binary, compact, "
- "simplejson, json)\")" << endl << indent()
- << "flag.StringVar(&urlString, \"u\", \"\", \"Specify the url\")" << endl << indent()
- << "flag.BoolVar(&framed, \"framed\", false, \"Use framed transport\")" << endl << indent()
- << "flag.BoolVar(&useHttp, \"http\", false, \"Use http\")" << endl << indent()
- << "flag.Parse()" << endl << indent() << endl << indent() << "if len(urlString) > 0 {" << endl
- << indent() << " parsedUrl, err := url.Parse(urlString)" << endl << indent()
- << " if err != nil {" << endl << indent()
- << " fmt.Fprintln(os.Stderr, \"Error parsing URL: \", err)" << endl << indent()
- << " flag.Usage()" << endl << indent() << " }" << endl << indent()
- << " host = parsedUrl.Host" << endl << indent()
- << " useHttp = len(parsedUrl.Scheme) <= 0 || parsedUrl.Scheme == \"http\"" << endl
- << indent() << "} else if useHttp {" << endl << indent()
- << " _, err := url.Parse(fmt.Sprint(\"http://\", host, \":\", port))" << endl << indent()
- << " if err != nil {" << endl << indent()
- << " fmt.Fprintln(os.Stderr, \"Error parsing URL: \", err)" << endl << indent()
- << " flag.Usage()" << endl << indent() << " }" << endl << indent() << "}" << endl
- << indent() << endl << indent() << "cmd := flag.Arg(0)" << endl << indent() << "var err error"
- << endl << indent() << "if useHttp {" << endl << indent()
- << " trans, err = thrift.NewTHttpClient(parsedUrl.String())" << endl << indent()
- << "} else {" << endl << indent() << " portStr := fmt.Sprint(port)" << endl << indent()
- << " if strings.Contains(host, \":\") {" << endl << indent()
- << " host, portStr, err = net.SplitHostPort(host)" << endl << indent()
- << " if err != nil {" << endl << indent()
- << " fmt.Fprintln(os.Stderr, \"error with host:\", err)" << endl << indent()
- << " os.Exit(1)" << endl << indent() << " }" << endl << indent()
- << " }" << endl << indent()
- << " trans, err = thrift.NewTSocket(net.JoinHostPort(host, portStr))" << endl << indent()
- << " if err != nil {" << endl << indent()
- << " fmt.Fprintln(os.Stderr, \"error resolving address:\", err)" << endl << indent()
- << " os.Exit(1)" << endl << indent() << " }" << endl << indent() << " if framed {"
- << endl << indent() << " trans = thrift.NewTFramedTransport(trans)" << endl << indent()
- << " }" << endl << indent() << "}" << endl << indent() << "if err != nil {" << endl
- << indent() << " fmt.Fprintln(os.Stderr, \"Error creating transport\", err)" << endl
- << indent() << " os.Exit(1)" << endl << indent() << "}" << endl << indent()
- << "defer trans.Close()" << endl << indent() << "var protocolFactory thrift.TProtocolFactory"
- << endl << indent() << "switch protocol {" << endl << indent() << "case \"compact\":" << endl
- << indent() << " protocolFactory = thrift.NewTCompactProtocolFactory()" << endl << indent()
- << " break" << endl << indent() << "case \"simplejson\":" << endl << indent()
- << " protocolFactory = thrift.NewTSimpleJSONProtocolFactory()" << endl << indent()
- << " break" << endl << indent() << "case \"json\":" << endl << indent()
- << " protocolFactory = thrift.NewTJSONProtocolFactory()" << endl << indent() << " break"
- << endl << indent() << "case \"binary\", \"\":" << endl << indent()
- << " protocolFactory = thrift.NewTBinaryProtocolFactoryDefault()" << endl << indent()
- << " break" << endl << indent() << "default:" << endl << indent()
- << " fmt.Fprintln(os.Stderr, \"Invalid protocol specified: \", protocol)" << endl << indent()
- << " Usage()" << endl << indent() << " os.Exit(1)" << endl << indent() << "}" << endl
- << indent() << "client := " << package_name_ << ".New" << publicize(service_name_)
- << "ClientFactory(trans, protocolFactory)" << endl << indent()
- << "if err := trans.Open(); err != nil {" << endl << indent()
- << " fmt.Fprintln(os.Stderr, \"Error opening socket to \", host, \":\", port, \" \", err)"
- << endl << indent() << " os.Exit(1)" << endl << indent() << "}" << endl << indent() << endl
- << indent() << "switch cmd {" << endl;
+ f_remote << indent() << "flag.Usage = Usage" << endl;
+ f_remote << indent() << "var host string" << endl;
+ f_remote << indent() << "var port int" << endl;
+ f_remote << indent() << "var protocol string" << endl;
+ f_remote << indent() << "var urlString string" << endl;
+ f_remote << indent() << "var framed bool" << endl;
+ f_remote << indent() << "var useHttp bool" << endl;
+ f_remote << indent() << "var parsedUrl url.URL" << endl;
+ f_remote << indent() << "var trans thrift.TTransport" << endl;
+ f_remote << indent() << "_ = strconv.Atoi" << endl;
+ f_remote << indent() << "_ = math.Abs" << endl;
+ f_remote << indent() << "flag.Usage = Usage" << endl;
+ f_remote << indent() << "flag.StringVar(&host, \"h\", \"localhost\", \"Specify host and port\")"
+ << endl;
+ f_remote << indent() << "flag.IntVar(&port, \"p\", 9090, \"Specify port\")" << endl;
+ f_remote << indent() << "flag.StringVar(&protocol, \"P\", \"binary\", \""
+ "Specify the protocol (binary, compact, simplejson, json)\")" << endl;
+ f_remote << indent() << "flag.StringVar(&urlString, \"u\", \"\", \"Specify the url\")" << endl;
+ f_remote << indent() << "flag.BoolVar(&framed, \"framed\", false, \"Use framed transport\")"
+ << endl;
+ f_remote << indent() << "flag.BoolVar(&useHttp, \"http\", false, \"Use http\")" << endl;
+ f_remote << indent() << "flag.Parse()" << endl;
+ f_remote << indent() << endl;
+ f_remote << indent() << "if len(urlString) > 0 {" << endl;
+ f_remote << indent() << " parsedUrl, err := url.Parse(urlString)" << endl;
+ f_remote << indent() << " if err != nil {" << endl;
+ f_remote << indent() << " fmt.Fprintln(os.Stderr, \"Error parsing URL: \", err)" << endl;
+ f_remote << indent() << " flag.Usage()" << endl;
+ f_remote << indent() << " }" << endl;
+ f_remote << indent() << " host = parsedUrl.Host" << endl;
+ f_remote << indent() << " useHttp = len(parsedUrl.Scheme) <= 0 || parsedUrl.Scheme == \"http\""
+ << endl;
+ f_remote << indent() << "} else if useHttp {" << endl;
+ f_remote << indent() << " _, err := url.Parse(fmt.Sprint(\"http://\", host, \":\", port))"
+ << endl;
+ f_remote << indent() << " if err != nil {" << endl;
+ f_remote << indent() << " fmt.Fprintln(os.Stderr, \"Error parsing URL: \", err)" << endl;
+ f_remote << indent() << " flag.Usage()" << endl;
+ f_remote << indent() << " }" << endl;
+ f_remote << indent() << "}" << endl;
+ f_remote << indent() << endl;
+ f_remote << indent() << "cmd := flag.Arg(0)" << endl;
+ f_remote << indent() << "var err error" << endl;
+ f_remote << indent() << "if useHttp {" << endl;
+ f_remote << indent() << " trans, err = thrift.NewTHttpClient(parsedUrl.String())" << endl;
+ f_remote << indent() << "} else {" << endl;
+ f_remote << indent() << " portStr := fmt.Sprint(port)" << endl;
+ f_remote << indent() << " if strings.Contains(host, \":\") {" << endl;
+ f_remote << indent() << " host, portStr, err = net.SplitHostPort(host)" << endl;
+ f_remote << indent() << " if err != nil {" << endl;
+ f_remote << indent() << " fmt.Fprintln(os.Stderr, \"error with host:\", err)"
+ << endl;
+ f_remote << indent() << " os.Exit(1)" << endl;
+ f_remote << indent() << " }" << endl;
+ f_remote << indent() << " }" << endl;
+ f_remote << indent() << " trans, err = thrift.NewTSocket(net.JoinHostPort(host, portStr))"
+ << endl;
+ f_remote << indent() << " if err != nil {" << endl;
+ f_remote << indent() << " fmt.Fprintln(os.Stderr, \"error resolving address:\", err)" << endl;
+ f_remote << indent() << " os.Exit(1)" << endl;
+ f_remote << indent() << " }" << endl;
+ f_remote << indent() << " if framed {" << endl;
+ f_remote << indent() << " trans = thrift.NewTFramedTransport(trans)" << endl;
+ f_remote << indent() << " }" << endl;
+ f_remote << indent() << "}" << endl;
+ f_remote << indent() << "if err != nil {" << endl;
+ f_remote << indent() << " fmt.Fprintln(os.Stderr, \"Error creating transport\", err)" << endl;
+ f_remote << indent() << " os.Exit(1)" << endl;
+ f_remote << indent() << "}" << endl;
+ f_remote << indent() << "defer trans.Close()" << endl;
+ f_remote << indent() << "var protocolFactory thrift.TProtocolFactory" << endl;
+ f_remote << indent() << "switch protocol {" << endl;
+ f_remote << indent() << "case \"compact\":" << endl;
+ f_remote << indent() << " protocolFactory = thrift.NewTCompactProtocolFactory()" << endl;
+ f_remote << indent() << " break" << endl;
+ f_remote << indent() << "case \"simplejson\":" << endl;
+ f_remote << indent() << " protocolFactory = thrift.NewTSimpleJSONProtocolFactory()" << endl;
+ f_remote << indent() << " break" << endl;
+ f_remote << indent() << "case \"json\":" << endl;
+ f_remote << indent() << " protocolFactory = thrift.NewTJSONProtocolFactory()" << endl;
+ f_remote << indent() << " break" << endl;
+ f_remote << indent() << "case \"binary\", \"\":" << endl;
+ f_remote << indent() << " protocolFactory = thrift.NewTBinaryProtocolFactoryDefault()" << endl;
+ f_remote << indent() << " break" << endl;
+ f_remote << indent() << "default:" << endl;
+ f_remote << indent() << " fmt.Fprintln(os.Stderr, \"Invalid protocol specified: \", protocol)"
+ << endl;
+ f_remote << indent() << " Usage()" << endl;
+ f_remote << indent() << " os.Exit(1)" << endl;
+ f_remote << indent() << "}" << endl;
+ f_remote << indent() << "client := " << package_name_ << ".New" << publicize(service_name_)
+ << "ClientFactory(trans, protocolFactory)" << endl;
+ f_remote << indent() << "if err := trans.Open(); err != nil {" << endl;
+ f_remote << indent() << " fmt.Fprintln(os.Stderr, \"Error opening socket to \", "
+ "host, \":\", port, \" \", err)" << endl;
+ f_remote << indent() << " os.Exit(1)" << endl;
+ f_remote << indent() << "}" << endl;
+ f_remote << indent() << endl;
+ f_remote << indent() << "switch cmd {" << endl;
for (f_iter = functions.begin(); f_iter != functions.end(); ++f_iter) {
t_struct* arg_struct = (*f_iter)->get_arglist();
@@ -1929,10 +2021,11 @@
string argumentsName(publicize(funcName + "_args", true));
f_remote << indent() << "case \"" << escape_string(funcName) << "\":" << endl;
indent_up();
- f_remote << indent() << "if flag.NArg() - 1 != " << num_args << " {" << endl << indent()
- << " fmt.Fprintln(os.Stderr, \"" << escape_string(pubName) << " requires " << num_args
- << " args\")" << endl << indent() << " flag.Usage()" << endl << indent() << "}"
- << endl;
+ f_remote << indent() << "if flag.NArg() - 1 != " << num_args << " {" << endl;
+ f_remote << indent() << " fmt.Fprintln(os.Stderr, \"" << escape_string(pubName) << " requires "
+ << num_args << " args\")" << endl;
+ f_remote << indent() << " flag.Usage()" << endl;
+ f_remote << indent() << "}" << endl;
for (int i = 0; i < num_args; ++i) {
int flagArg = i + 1;
@@ -1941,9 +2034,12 @@
if (the_type2->is_enum()) {
f_remote << indent() << "tmp" << i << ", err := (strconv.Atoi(flag.Arg(" << flagArg << ")))"
- << endl << indent() << "if err != nil {" << endl << indent() << " Usage()" << endl
- << indent() << " return" << endl << indent() << "}" << endl << indent()
- << "argvalue" << i << " := " << package_name_ << "."
+ << endl;
+ f_remote << indent() << "if err != nil {" << endl;
+ f_remote << indent() << " Usage()" << endl;
+ f_remote << indent() << " return" << endl;
+ f_remote << indent() << "}" << endl;
+ f_remote << indent() << "argvalue" << i << " := " << package_name_ << "."
<< publicize(the_type->get_name()) << "(tmp" << i << ")" << endl;
} else if (the_type2->is_base_type()) {
t_base_type::t_base e = ((t_base_type*)the_type2)->get_base();
@@ -1969,40 +2065,50 @@
case t_base_type::TYPE_BYTE:
f_remote << indent() << "tmp" << i << ", " << err << " := (strconv.Atoi(flag.Arg("
- << flagArg << ")))" << endl << indent() << "if " << err << " != nil {" << endl
- << indent() << " Usage()" << endl << indent() << " return" << endl << indent()
- << "}" << endl << indent() << "argvalue" << i << " := byte(tmp" << i << ")"
- << endl;
+ << flagArg << ")))" << endl;
+ f_remote << indent() << "if " << err << " != nil {" << endl;
+ f_remote << indent() << " Usage()" << endl;
+ f_remote << indent() << " return" << endl;
+ f_remote << indent() << "}" << endl;
+ f_remote << indent() << "argvalue" << i << " := byte(tmp" << i << ")" << endl;
break;
case t_base_type::TYPE_I16:
f_remote << indent() << "tmp" << i << ", " << err << " := (strconv.Atoi(flag.Arg("
- << flagArg << ")))" << endl << indent() << "if " << err << " != nil {" << endl
- << indent() << " Usage()" << endl << indent() << " return" << endl << indent()
- << "}" << endl << indent() << "argvalue" << i << " := byte(tmp" << i << ")"
- << endl;
+ << flagArg << ")))" << endl;
+ f_remote << indent() << "if " << err << " != nil {" << endl;
+ f_remote << indent() << " Usage()" << endl;
+ f_remote << indent() << " return" << endl;
+ f_remote << indent() << "}" << endl;
+ f_remote << indent() << "argvalue" << i << " := byte(tmp" << i << ")" << endl;
break;
case t_base_type::TYPE_I32:
f_remote << indent() << "tmp" << i << ", " << err << " := (strconv.Atoi(flag.Arg("
- << flagArg << ")))" << endl << indent() << "if " << err << " != nil {" << endl
- << indent() << " Usage()" << endl << indent() << " return" << endl << indent()
- << "}" << endl << indent() << "argvalue" << i << " := int32(tmp" << i << ")"
- << endl;
+ << flagArg << ")))" << endl;
+ f_remote << indent() << "if " << err << " != nil {" << endl;
+ f_remote << indent() << " Usage()" << endl;
+ f_remote << indent() << " return" << endl;
+ f_remote << indent() << "}" << endl;
+ f_remote << indent() << "argvalue" << i << " := int32(tmp" << i << ")" << endl;
break;
case t_base_type::TYPE_I64:
f_remote << indent() << "argvalue" << i << ", " << err
- << " := (strconv.ParseInt(flag.Arg(" << flagArg << "), 10, 64))" << endl
- << indent() << "if " << err << " != nil {" << endl << indent() << " Usage()"
- << endl << indent() << " return" << endl << indent() << "}" << endl;
+ << " := (strconv.ParseInt(flag.Arg(" << flagArg << "), 10, 64))" << endl;
+ f_remote << indent() << "if " << err << " != nil {" << endl;
+ f_remote << indent() << " Usage()" << endl;
+ f_remote << indent() << " return" << endl;
+ f_remote << indent() << "}" << endl;
break;
case t_base_type::TYPE_DOUBLE:
f_remote << indent() << "argvalue" << i << ", " << err
- << " := (strconv.ParseFloat(flag.Arg(" << flagArg << "), 64))" << endl
- << indent() << "if " << err << " != nil {" << endl << indent() << " Usage()"
- << endl << indent() << " return" << endl << indent() << "}" << endl;
+ << " := (strconv.ParseFloat(flag.Arg(" << flagArg << "), 64))" << endl;
+ f_remote << indent() << "if " << err << " != nil {" << endl;
+ f_remote << indent() << " Usage()" << endl;
+ f_remote << indent() << " return" << endl;
+ f_remote << indent() << "}" << endl;
break;
default:
@@ -2019,19 +2125,26 @@
string jsProt(tmp("jsProt"));
string err2(tmp("err"));
std::string tstruct_name(publicize(the_type->get_name()));
- f_remote << indent() << arg << " := flag.Arg(" << flagArg << ")" << endl << indent()
- << mbTrans << " := thrift.NewTMemoryBufferLen(len(" << arg << "))" << endl
- << indent() << "defer " << mbTrans << ".Close()" << endl << indent() << "_, "
- << err1 << " := " << mbTrans << ".WriteString(" << arg << ")" << endl << indent()
- << "if " << err1 << " != nil {" << endl << indent() << " Usage()" << endl
- << indent() << " return" << endl << indent() << "}" << endl << indent() << factory
- << " := thrift.NewTSimpleJSONProtocolFactory()" << endl << indent() << jsProt
- << " := " << factory << ".GetProtocol(" << mbTrans << ")" << endl << indent()
- << "argvalue" << i << " := " << package_name_ << ".New" << tstruct_name << "()"
- << endl << indent() << err2 << " := argvalue" << i << ".Read(" << jsProt << ")"
- << endl << indent() << "if " << err2 << " != nil {" << endl << indent()
- << " Usage()" << endl << indent() << " return" << endl << indent() << "}"
+ f_remote << indent() << arg << " := flag.Arg(" << flagArg << ")" << endl;
+ f_remote << indent() << mbTrans << " := thrift.NewTMemoryBufferLen(len(" << arg << "))"
<< endl;
+ f_remote << indent() << "defer " << mbTrans << ".Close()" << endl;
+ f_remote << indent() << "_, " << err1 << " := " << mbTrans << ".WriteString(" << arg << ")"
+ << endl;
+ f_remote << indent() << "if " << err1 << " != nil {" << endl;
+ f_remote << indent() << " Usage()" << endl;
+ f_remote << indent() << " return" << endl;
+ f_remote << indent() << "}" << endl;
+ f_remote << indent() << factory << " := thrift.NewTSimpleJSONProtocolFactory()" << endl;
+ f_remote << indent() << jsProt << " := " << factory << ".GetProtocol(" << mbTrans << ")"
+ << endl;
+ f_remote << indent() << "argvalue" << i << " := " << package_name_ << ".New" << tstruct_name
+ << "()" << endl;
+ f_remote << indent() << err2 << " := argvalue" << i << ".Read(" << jsProt << ")" << endl;
+ f_remote << indent() << "if " << err2 << " != nil {" << endl;
+ f_remote << indent() << " Usage()" << endl;
+ f_remote << indent() << " return" << endl;
+ f_remote << indent() << "}" << endl;
} else if (the_type2->is_container() || the_type2->is_xception()) {
string arg(tmp("arg"));
string mbTrans(tmp("mbTrans"));
@@ -2040,20 +2153,29 @@
string jsProt(tmp("jsProt"));
string err2(tmp("err"));
std::string argName(publicize(args[i]->get_name()));
- f_remote << indent() << arg << " := flag.Arg(" << flagArg << ")" << endl << indent()
- << mbTrans << " := thrift.NewTMemoryBufferLen(len(" << arg << "))" << endl
- << indent() << "defer " << mbTrans << ".Close()" << endl << indent() << "_, "
- << err1 << " := " << mbTrans << ".WriteString(" << arg << ")" << endl << indent()
- << "if " << err1 << " != nil { " << endl << indent() << " Usage()" << endl
- << indent() << " return" << endl << indent() << "}" << endl << indent() << factory
- << " := thrift.NewTSimpleJSONProtocolFactory()" << endl << indent() << jsProt
- << " := " << factory << ".GetProtocol(" << mbTrans << ")" << endl << indent()
- << "containerStruct" << i << " := " << package_name_ << ".New" << argumentsName
- << "()" << endl << indent() << err2 << " := containerStruct" << i << ".ReadField"
- << (i + 1) << "(" << jsProt << ")" << endl << indent() << "if " << err2
- << " != nil {" << endl << indent() << " Usage()" << endl << indent() << " return"
- << endl << indent() << "}" << endl << indent() << "argvalue" << i
- << " := containerStruct" << i << "." << argName << endl;
+ f_remote << indent() << arg << " := flag.Arg(" << flagArg << ")" << endl;
+ f_remote << indent() << mbTrans << " := thrift.NewTMemoryBufferLen(len(" << arg << "))"
+ << endl;
+ f_remote << indent() << "defer " << mbTrans << ".Close()" << endl;
+ f_remote << indent() << "_, " << err1 << " := " << mbTrans << ".WriteString(" << arg << ")"
+ << endl;
+ f_remote << indent() << "if " << err1 << " != nil { " << endl;
+ f_remote << indent() << " Usage()" << endl;
+ f_remote << indent() << " return" << endl;
+ f_remote << indent() << "}" << endl;
+ f_remote << indent() << factory << " := thrift.NewTSimpleJSONProtocolFactory()" << endl;
+ f_remote << indent() << jsProt << " := " << factory << ".GetProtocol(" << mbTrans << ")"
+ << endl;
+ f_remote << indent() << "containerStruct" << i << " := " << package_name_ << ".New"
+ << argumentsName << "()" << endl;
+ f_remote << indent() << err2 << " := containerStruct" << i << ".ReadField" << (i + 1) << "("
+ << jsProt << ")" << endl;
+ f_remote << indent() << "if " << err2 << " != nil {" << endl;
+ f_remote << indent() << " Usage()" << endl;
+ f_remote << indent() << " return" << endl;
+ f_remote << indent() << "}" << endl;
+ f_remote << indent() << "argvalue" << i << " := containerStruct" << i << "." << argName
+ << endl;
} else {
throw("Invalid argument type in generate_service_remote");
}
@@ -2106,15 +2228,18 @@
}
}
- f_remote << "))" << endl << indent() << "fmt.Print(\"\\n\")" << endl << indent() << "break"
- << endl;
+ f_remote << "))" << endl;
+ f_remote << indent() << "fmt.Print(\"\\n\")" << endl;
+ f_remote << indent() << "break" << endl;
indent_down();
}
- f_remote << indent() << "case \"\":" << endl << indent() << " Usage()" << endl << indent()
- << " break" << endl << indent() << "default:" << endl << indent()
- << " fmt.Fprintln(os.Stderr, \"Invalid function \", cmd)" << endl << indent() << "}"
- << endl;
+ f_remote << indent() << "case \"\":" << endl;
+ f_remote << indent() << " Usage()" << endl;
+ f_remote << indent() << " break" << endl;
+ f_remote << indent() << "default:" << endl;
+ f_remote << indent() << " fmt.Fprintln(os.Stderr, \"Invalid function \", cmd)" << endl;
+ f_remote << indent() << "}" << endl;
indent_down();
f_remote << indent() << "}" << endl;
// Close service file
@@ -2165,22 +2290,29 @@
string self(tmp("self"));
if (extends_processor.empty()) {
+ f_service_ << indent() << "type " << serviceName << "Processor struct {" << endl;
+ f_service_ << indent() << " processorMap map[string]thrift.TProcessorFunction" << endl;
+ f_service_ << indent() << " handler " << serviceName << endl;
+ f_service_ << indent() << "}" << endl << endl;
+ f_service_ << indent() << "func (p *" << serviceName
+ << "Processor) AddToProcessorMap(key string, processor thrift.TProcessorFunction) {"
+ << endl;
+ f_service_ << indent() << " p.processorMap[key] = processor" << endl;
+ f_service_ << indent() << "}" << endl << endl;
+ f_service_ << indent() << "func (p *" << serviceName
+ << "Processor) GetProcessorFunction(key string) "
+ "(processor thrift.TProcessorFunction, ok bool) {" << endl;
+ f_service_ << indent() << " processor, ok = p.processorMap[key]" << endl;
+ f_service_ << indent() << " return processor, ok" << endl;
+ f_service_ << indent() << "}" << endl << endl;
+ f_service_ << indent() << "func (p *" << serviceName
+ << "Processor) ProcessorMap() map[string]thrift.TProcessorFunction {" << endl;
+ f_service_ << indent() << " return p.processorMap" << endl;
+ f_service_ << indent() << "}" << endl << endl;
+ f_service_ << indent() << "func New" << serviceName << "Processor(handler " << serviceName
+ << ") *" << serviceName << "Processor {" << endl << endl;
f_service_
- << indent() << "type " << serviceName << "Processor struct {" << endl << indent()
- << " processorMap map[string]thrift.TProcessorFunction" << endl << indent() << " handler "
- << serviceName << endl << indent() << "}" << endl << endl << indent() << "func (p *"
- << serviceName
- << "Processor) AddToProcessorMap(key string, processor thrift.TProcessorFunction) {" << endl
- << indent() << " p.processorMap[key] = processor" << endl << indent() << "}" << endl
- << endl << indent() << "func (p *" << serviceName
- << "Processor) GetProcessorFunction(key string) (processor thrift.TProcessorFunction, ok "
- "bool) {" << endl << indent() << " processor, ok = p.processorMap[key]" << endl
- << indent() << " return processor, ok" << endl << indent() << "}" << endl << endl
- << indent() << "func (p *" << serviceName
- << "Processor) ProcessorMap() map[string]thrift.TProcessorFunction {" << endl << indent()
- << " return p.processorMap" << endl << indent() << "}" << endl << endl << indent()
- << "func New" << serviceName << "Processor(handler " << serviceName << ") *" << serviceName
- << "Processor {" << endl << endl << indent() << " " << self << " := &" << serviceName
+ << indent() << " " << self << " := &" << serviceName
<< "Processor{handler:handler, processorMap:make(map[string]thrift.TProcessorFunction)}"
<< endl;
@@ -2192,28 +2324,36 @@
}
string x(tmp("x"));
- f_service_ << indent() << "return " << self << endl << indent() << "}" << endl << endl
- << indent() << "func (p *" << serviceName
+ f_service_ << indent() << "return " << self << endl;
+ f_service_ << indent() << "}" << endl << endl;
+ f_service_ << indent() << "func (p *" << serviceName
<< "Processor) Process(iprot, oprot thrift.TProtocol) (success bool, err "
- "thrift.TException) {" << endl << indent()
- << " name, _, seqId, err := iprot.ReadMessageBegin()" << endl << indent()
- << " if err != nil { return false, err }" << endl << indent()
- << " if processor, ok := p.GetProcessorFunction(name); ok {" << endl << indent()
- << " return processor.Process(seqId, iprot, oprot)" << endl << indent() << " }"
- << endl << indent() << " iprot.Skip(thrift.STRUCT)" << endl << indent()
- << " iprot.ReadMessageEnd()" << endl << indent() << " " << x
+ "thrift.TException) {" << endl;
+ f_service_ << indent() << " name, _, seqId, err := iprot.ReadMessageBegin()" << endl;
+ f_service_ << indent() << " if err != nil { return false, err }" << endl;
+ f_service_ << indent() << " if processor, ok := p.GetProcessorFunction(name); ok {" << endl;
+ f_service_ << indent() << " return processor.Process(seqId, iprot, oprot)" << endl;
+ f_service_ << indent() << " }" << endl;
+ f_service_ << indent() << " iprot.Skip(thrift.STRUCT)" << endl;
+ f_service_ << indent() << " iprot.ReadMessageEnd()" << endl;
+ f_service_ << indent() << " " << x
<< " := thrift.NewTApplicationException(thrift.UNKNOWN_METHOD, \"Unknown function "
- "\" + name)" << endl << indent()
- << " oprot.WriteMessageBegin(name, thrift.EXCEPTION, seqId)" << endl << indent()
- << " " << x << ".Write(oprot)" << endl << indent() << " oprot.WriteMessageEnd()"
- << endl << indent() << " oprot.Flush()" << endl << indent() << " return false, "
- << x << endl << indent() << "" << endl << indent() << "}" << endl << endl;
+ "\" + name)" << endl;
+ f_service_ << indent() << " oprot.WriteMessageBegin(name, thrift.EXCEPTION, seqId)" << endl;
+ f_service_ << indent() << " " << x << ".Write(oprot)" << endl;
+ f_service_ << indent() << " oprot.WriteMessageEnd()" << endl;
+ f_service_ << indent() << " oprot.Flush()" << endl;
+ f_service_ << indent() << " return false, " << x << endl;
+ f_service_ << indent() << "" << endl;
+ f_service_ << indent() << "}" << endl << endl;
} else {
- f_service_ << indent() << "type " << serviceName << "Processor struct {" << endl << indent()
- << " *" << extends_processor << endl << indent() << "}" << endl << endl << indent()
- << "func New" << serviceName << "Processor(handler " << serviceName << ") *"
- << serviceName << "Processor {" << endl << indent() << " " << self << " := &"
- << serviceName << "Processor{" << extends_processor_new << "(handler)}" << endl;
+ f_service_ << indent() << "type " << serviceName << "Processor struct {" << endl;
+ f_service_ << indent() << " *" << extends_processor << endl;
+ f_service_ << indent() << "}" << endl << endl;
+ f_service_ << indent() << "func New" << serviceName << "Processor(handler " << serviceName
+ << ") *" << serviceName << "Processor {" << endl;
+ f_service_ << indent() << " " << self << " := &" << serviceName << "Processor{"
+ << extends_processor_new << "(handler)}" << endl;
for (f_iter = functions.begin(); f_iter != functions.end(); ++f_iter) {
string escapedFuncName(escape_string((*f_iter)->get_name()));
@@ -2222,7 +2362,8 @@
<< "{handler:handler})" << endl;
}
- f_service_ << indent() << " return " << self << endl << indent() << "}" << endl << endl;
+ f_service_ << indent() << " return " << self << endl;
+ f_service_ << indent() << "}" << endl << endl;
}
// Generate the process subfunctions
@@ -2247,25 +2388,29 @@
// t_struct* xs = tfunction->get_xceptions();
// const std::vector<t_field*>& xceptions = xs->get_members();
vector<t_field*>::const_iterator x_iter;
- f_service_ << indent() << "type " << processorName << " struct {" << endl << indent()
- << " handler " << publicize(tservice->get_name()) << endl << indent() << "}" << endl
- << endl << indent() << "func (p *" << processorName
+ f_service_ << indent() << "type " << processorName << " struct {" << endl;
+ f_service_ << indent() << " handler " << publicize(tservice->get_name()) << endl;
+ f_service_ << indent() << "}" << endl << endl;
+ f_service_ << indent() << "func (p *" << processorName
<< ") Process(seqId int32, iprot, oprot thrift.TProtocol) (success bool, err "
"thrift.TException) {" << endl;
indent_up();
- f_service_ << indent() << "args := " << argsname << "{}" << endl << indent()
- << "if err = args.Read(iprot); err != nil {" << endl << indent()
- << " iprot.ReadMessageEnd()" << endl;
+ f_service_ << indent() << "args := " << argsname << "{}" << endl;
+ f_service_ << indent() << "if err = args.Read(iprot); err != nil {" << endl;
+ f_service_ << indent() << " iprot.ReadMessageEnd()" << endl;
if (!tfunction->is_oneway()) {
f_service_ << indent()
<< " x := thrift.NewTApplicationException(thrift.PROTOCOL_ERROR, err.Error())"
- << endl << indent() << " oprot.WriteMessageBegin(\""
- << escape_string(tfunction->get_name()) << "\", thrift.EXCEPTION, seqId)" << endl
- << indent() << " x.Write(oprot)" << endl << indent() << " oprot.WriteMessageEnd()"
- << endl << indent() << " oprot.Flush()" << endl;
+ << endl;
+ f_service_ << indent() << " oprot.WriteMessageBegin(\"" << escape_string(tfunction->get_name())
+ << "\", thrift.EXCEPTION, seqId)" << endl;
+ f_service_ << indent() << " x.Write(oprot)" << endl;
+ f_service_ << indent() << " oprot.WriteMessageEnd()" << endl;
+ f_service_ << indent() << " oprot.Flush()" << endl;
}
- f_service_ << indent() << " return false, err" << endl << indent() << "}" << endl << endl
- << indent() << "iprot.ReadMessageEnd()" << endl;
+ f_service_ << indent() << " return false, err" << endl;
+ f_service_ << indent() << "}" << endl << endl;
+ f_service_ << indent() << "iprot.ReadMessageEnd()" << endl;
if (!tfunction->is_oneway()) {
f_service_ << indent() << "result := " << resultname << "{}" << endl;
@@ -2275,7 +2420,8 @@
f_service_ << "var retval " << type_to_go_type(tfunction->get_returntype()) << endl;
}
- f_service_ << indent() << "var err2 error" << endl << indent() << "if ";
+ f_service_ << indent() << "var err2 error" << endl;
+ f_service_ << indent() << "if ";
if (!tfunction->is_oneway()) {
if (!tfunction->get_returntype()->is_void()) {
@@ -2311,7 +2457,8 @@
for (xf_iter = x_fields.begin(); xf_iter != x_fields.end(); ++xf_iter) {
f_service_ << indent() << " case " << type_to_go_type(((*xf_iter)->get_type())) << ":"
- << endl << indent() << "result."
+ << endl;
+ f_service_ << indent() << "result."
<< publicize(variable_name_to_go_name((*xf_iter)->get_name())) << " = v" << endl;
}
@@ -2321,10 +2468,12 @@
if (!tfunction->is_oneway()) {
f_service_ << indent() << " x := thrift.NewTApplicationException(thrift.INTERNAL_ERROR, "
"\"Internal error processing " << escape_string(tfunction->get_name())
- << ": \" + err2.Error())" << endl << indent() << " oprot.WriteMessageBegin(\""
- << escape_string(tfunction->get_name()) << "\", thrift.EXCEPTION, seqId)" << endl
- << indent() << " x.Write(oprot)" << endl << indent() << " oprot.WriteMessageEnd()"
- << endl << indent() << " oprot.Flush()" << endl;
+ << ": \" + err2.Error())" << endl;
+ f_service_ << indent() << " oprot.WriteMessageBegin(\"" << escape_string(tfunction->get_name())
+ << "\", thrift.EXCEPTION, seqId)" << endl;
+ f_service_ << indent() << " x.Write(oprot)" << endl;
+ f_service_ << indent() << " oprot.WriteMessageEnd()" << endl;
+ f_service_ << indent() << " oprot.Flush()" << endl;
}
f_service_ << indent() << " return true, err2" << endl;
@@ -2351,17 +2500,26 @@
}
f_service_ << indent() << "if err2 = oprot.WriteMessageBegin(\""
<< escape_string(tfunction->get_name()) << "\", thrift.REPLY, seqId); err2 != nil {"
- << endl << indent() << " err = err2" << endl << indent() << "}" << endl << indent()
- << "if err2 = result.Write(oprot); err == nil && err2 != nil {" << endl << indent()
- << " err = err2" << endl << indent() << "}" << endl << indent()
- << "if err2 = oprot.WriteMessageEnd(); err == nil && err2 != nil {" << endl
- << indent() << " err = err2" << endl << indent() << "}" << endl << indent()
- << "if err2 = oprot.Flush(); err == nil && err2 != nil {" << endl << indent()
- << " err = err2" << endl << indent() << "}" << endl << indent() << "if err != nil {"
- << endl << indent() << " return" << endl << indent() << "}" << endl << indent()
- << "return true, err" << endl;
+ << endl;
+ f_service_ << indent() << " err = err2" << endl;
+ f_service_ << indent() << "}" << endl;
+ f_service_ << indent() << "if err2 = result.Write(oprot); err == nil && err2 != nil {" << endl;
+ f_service_ << indent() << " err = err2" << endl;
+ f_service_ << indent() << "}" << endl;
+ f_service_ << indent() << "if err2 = oprot.WriteMessageEnd(); err == nil && err2 != nil {"
+ << endl;
+ f_service_ << indent() << " err = err2" << endl;
+ f_service_ << indent() << "}" << endl;
+ f_service_ << indent() << "if err2 = oprot.Flush(); err == nil && err2 != nil {" << endl;
+ f_service_ << indent() << " err = err2" << endl;
+ f_service_ << indent() << "}" << endl;
+ f_service_ << indent() << "if err != nil {" << endl;
+ f_service_ << indent() << " return" << endl;
+ f_service_ << indent() << "}" << endl;
+ f_service_ << indent() << "return true, err" << endl;
} else {
- f_service_ << endl << indent() << "return true, nil" << endl;
+ f_service_ << endl;
+ f_service_ << indent() << "return true, nil" << endl;
}
indent_down();
f_service_ << indent() << "}" << endl << endl;
@@ -2454,9 +2612,9 @@
out << "ReadI32()";
}
- out << "; err != nil {" << endl << indent()
- << "return thrift.PrependError(\"error reading field " << tfield->get_key() << ": \", err)"
- << endl;
+ out << "; err != nil {" << endl;
+ out << indent() << "return thrift.PrependError(\"error reading field " << tfield->get_key()
+ << ": \", err)" << endl;
out << "} else {" << endl;
string wrap;
@@ -2494,9 +2652,10 @@
out << indent() << prefix << eq << (pointer_field ? "&" : "");
generate_go_struct_initializer(out, tstruct);
- out << indent() << "if err := " << prefix << ".Read(iprot); err != nil {" << endl << indent()
- << " return thrift.PrependError(fmt.Sprintf(\"%T error reading struct: \", " << prefix
- << "), err)" << endl << indent() << "}" << endl;
+ out << indent() << "if err := " << prefix << ".Read(iprot); err != nil {" << endl;
+ out << indent() << " return thrift.PrependError(fmt.Sprintf(\"%T error reading struct: \", "
+ << prefix << "), err)" << endl;
+ out << indent() << "}" << endl;
}
/**
@@ -2517,26 +2676,28 @@
// Declare variables, read header
if (ttype->is_map()) {
- out << indent() << "_, _, size, err := iprot.ReadMapBegin()" << endl << indent()
- << "if err != nil {" << endl << indent()
- << " return thrift.PrependError(\"error reading map begin: \", err)" << endl << indent()
- << "}" << endl << indent() << "tMap := make(" << type_to_go_type(orig_type) << ", size)"
- << endl << indent() << prefix << eq << " " << (pointer_field ? "&" : "") << "tMap" << endl;
+ out << indent() << "_, _, size, err := iprot.ReadMapBegin()" << endl;
+ out << indent() << "if err != nil {" << endl;
+ out << indent() << " return thrift.PrependError(\"error reading map begin: \", err)" << endl;
+ out << indent() << "}" << endl;
+ out << indent() << "tMap := make(" << type_to_go_type(orig_type) << ", size)" << endl;
+ out << indent() << prefix << eq << " " << (pointer_field ? "&" : "") << "tMap" << endl;
} else if (ttype->is_set()) {
t_set* t = (t_set*)ttype;
- out << indent() << "_, size, err := iprot.ReadSetBegin()" << endl << indent()
- << "if err != nil {" << endl << indent()
- << " return thrift.PrependError(\"error reading set begin: \", err)" << endl << indent()
- << "}" << endl << indent() << "tSet := make(map["
- << type_to_go_key_type(t->get_elem_type()->get_true_type()) << "]bool, size)" << endl
- << indent() << prefix << eq << " " << (pointer_field ? "&" : "") << "tSet" << endl;
+ out << indent() << "_, size, err := iprot.ReadSetBegin()" << endl;
+ out << indent() << "if err != nil {" << endl;
+ out << indent() << " return thrift.PrependError(\"error reading set begin: \", err)" << endl;
+ out << indent() << "}" << endl;
+ out << indent() << "tSet := make(map["
+ << type_to_go_key_type(t->get_elem_type()->get_true_type()) << "]bool, size)" << endl;
+ out << indent() << prefix << eq << " " << (pointer_field ? "&" : "") << "tSet" << endl;
} else if (ttype->is_list()) {
- out << indent() << "_, size, err := iprot.ReadListBegin()" << endl << indent()
- << "if err != nil {" << endl << indent()
- << " return thrift.PrependError(\"error reading list begin: \", err)" << endl << indent()
- << "}" << endl << indent() << "tSlice := make(" << type_to_go_type(orig_type)
- << ", 0, size)" << endl << indent() << prefix << eq << " " << (pointer_field ? "&" : "")
- << "tSlice" << endl;
+ out << indent() << "_, size, err := iprot.ReadListBegin()" << endl;
+ out << indent() << "if err != nil {" << endl;
+ out << indent() << " return thrift.PrependError(\"error reading list begin: \", err)" << endl;
+ out << indent() << "}" << endl;
+ out << indent() << "tSlice := make(" << type_to_go_type(orig_type) << ", 0, size)" << endl;
+ out << indent() << prefix << eq << " " << (pointer_field ? "&" : "") << "tSlice" << endl;
} else {
throw "INVALID TYPE IN generate_deserialize_container '" + ttype->get_name() + "' for prefix '"
+ prefix + "'";
@@ -2562,17 +2723,17 @@
// Read container end
if (ttype->is_map()) {
- out << indent() << "if err := iprot.ReadMapEnd(); err != nil {" << endl << indent()
- << " return thrift.PrependError(\"error reading map end: \", err)" << endl << indent()
- << "}" << endl;
+ out << indent() << "if err := iprot.ReadMapEnd(); err != nil {" << endl;
+ out << indent() << " return thrift.PrependError(\"error reading map end: \", err)" << endl;
+ out << indent() << "}" << endl;
} else if (ttype->is_set()) {
- out << indent() << "if err := iprot.ReadSetEnd(); err != nil {" << endl << indent()
- << " return thrift.PrependError(\"error reading set end: \", err)" << endl << indent()
- << "}" << endl;
+ out << indent() << "if err := iprot.ReadSetEnd(); err != nil {" << endl;
+ out << indent() << " return thrift.PrependError(\"error reading set end: \", err)" << endl;
+ out << indent() << "}" << endl;
} else if (ttype->is_list()) {
- out << indent() << "if err := iprot.ReadListEnd(); err != nil {" << endl << indent()
- << " return thrift.PrependError(\"error reading list end: \", err)" << endl << indent()
- << "}" << endl;
+ out << indent() << "if err := iprot.ReadListEnd(); err != nil {" << endl;
+ out << indent() << " return thrift.PrependError(\"error reading list end: \", err)" << endl;
+ out << indent() << "}" << endl;
}
}
@@ -2702,7 +2863,8 @@
out << "WriteI32(int32(" << name << "))";
}
- out << "; err != nil {" << endl << indent() << "return thrift.PrependError(fmt.Sprintf(\"%T."
+ out << "; err != nil {" << endl;
+ out << indent() << "return thrift.PrependError(fmt.Sprintf(\"%T."
<< escape_string(tfield->get_name()) << " (" << tfield->get_key()
<< ") field write error: \", p), err) }" << endl;
} else {
@@ -2719,9 +2881,10 @@
*/
void t_go_generator::generate_serialize_struct(ofstream& out, t_struct* tstruct, string prefix) {
(void)tstruct;
- out << indent() << "if err := " << prefix << ".Write(oprot); err != nil {" << endl << indent()
- << " return thrift.PrependError(fmt.Sprintf(\"%T error writing struct: \", " << prefix
- << "), err)" << endl << indent() << "}" << endl;
+ out << indent() << "if err := " << prefix << ".Write(oprot); err != nil {" << endl;
+ out << indent() << " return thrift.PrependError(fmt.Sprintf(\"%T error writing struct: \", "
+ << prefix << "), err)" << endl;
+ out << indent() << "}" << endl;
}
void t_go_generator::generate_serialize_container(ofstream& out,
@@ -2735,21 +2898,21 @@
out << indent() << "if err := oprot.WriteMapBegin("
<< type_to_enum(((t_map*)ttype)->get_key_type()) << ", "
<< type_to_enum(((t_map*)ttype)->get_val_type()) << ", "
- << "len(" << prefix << ")); err != nil {" << endl << indent()
- << " return thrift.PrependError(\"error writing map begin: \", err)" << endl << indent()
- << "}" << endl;
+ << "len(" << prefix << ")); err != nil {" << endl;
+ out << indent() << " return thrift.PrependError(\"error writing map begin: \", err)" << endl;
+ out << indent() << "}" << endl;
} else if (ttype->is_set()) {
out << indent() << "if err := oprot.WriteSetBegin("
<< type_to_enum(((t_set*)ttype)->get_elem_type()) << ", "
- << "len(" << prefix << ")); err != nil {" << endl << indent()
- << " return thrift.PrependError(\"error writing set begin: \", err)" << endl << indent()
- << "}" << endl;
+ << "len(" << prefix << ")); err != nil {" << endl;
+ out << indent() << " return thrift.PrependError(\"error writing set begin: \", err)" << endl;
+ out << indent() << "}" << endl;
} else if (ttype->is_list()) {
out << indent() << "if err := oprot.WriteListBegin("
<< type_to_enum(((t_list*)ttype)->get_elem_type()) << ", "
- << "len(" << prefix << ")); err != nil {" << endl << indent()
- << " return thrift.PrependError(\"error writing list begin: \", err)" << endl << indent()
- << "}" << endl;
+ << "len(" << prefix << ")); err != nil {" << endl;
+ out << indent() << " return thrift.PrependError(\"error writing list begin: \", err)" << endl;
+ out << indent() << "}" << endl;
} else {
throw "compiler error: Invalid type in generate_serialize_container '" + ttype->get_name()
+ "' for prefix '" + prefix + "'";
@@ -2780,17 +2943,17 @@
}
if (ttype->is_map()) {
- out << indent() << "if err := oprot.WriteMapEnd(); err != nil {" << endl << indent()
- << " return thrift.PrependError(\"error writing map end: \", err)" << endl << indent()
- << "}" << endl;
+ out << indent() << "if err := oprot.WriteMapEnd(); err != nil {" << endl;
+ out << indent() << " return thrift.PrependError(\"error writing map end: \", err)" << endl;
+ out << indent() << "}" << endl;
} else if (ttype->is_set()) {
- out << indent() << "if err := oprot.WriteSetEnd(); err != nil {" << endl << indent()
- << " return thrift.PrependError(\"error writing set end: \", err)" << endl << indent()
- << "}" << endl;
+ out << indent() << "if err := oprot.WriteSetEnd(); err != nil {" << endl;
+ out << indent() << " return thrift.PrependError(\"error writing set end: \", err)" << endl;
+ out << indent() << "}" << endl;
} else if (ttype->is_list()) {
- out << indent() << "if err := oprot.WriteListEnd(); err != nil {" << endl << indent()
- << " return thrift.PrependError(\"error writing list end: \", err)" << endl << indent()
- << "}" << endl;
+ out << indent() << "if err := oprot.WriteListEnd(); err != nil {" << endl;
+ out << indent() << " return thrift.PrependError(\"error writing list end: \", err)" << endl;
+ out << indent() << "}" << endl;
}
}