go: Proper indent in compiler
This is a "trivial" change for go compiler to always use the combination
of indent_up, indent_down, and indent, over manual indentation (by
adding 2 spaces at the beginning of the string). Also change go
compiler's indent_str to tab over 2 spaces.
While I'm here, also made a few minor tweaks on generated go code.
diff --git a/compiler/cpp/src/thrift/generate/t_go_generator.cc b/compiler/cpp/src/thrift/generate/t_go_generator.cc
index 72a9f06..c135d64 100644
--- a/compiler/cpp/src/thrift/generate/t_go_generator.cc
+++ b/compiler/cpp/src/thrift/generate/t_go_generator.cc
@@ -785,46 +785,54 @@
std::ostringstream to_string_mapping, from_string_mapping;
std::string tenum_name(publicize(tenum->get_name()));
generate_go_docstring(f_types_, tenum);
- f_types_ << "type " << tenum_name << " int64" << '\n' << "const (" << '\n';
+ f_types_ << '\n' << "type " << tenum_name << " int64" << '\n' << "const (" << '\n';
to_string_mapping << indent() << "func (p " << tenum_name << ") String() string {" << '\n';
- to_string_mapping << indent() << " switch p {" << '\n';
+ indent_up();
+ to_string_mapping << indent() << "switch p {" << '\n';
+ indent_down();
from_string_mapping << indent() << "func " << tenum_name << "FromString(s string) (" << tenum_name
<< ", error) {" << '\n';
- from_string_mapping << indent() << " switch s {" << '\n';
+ indent_up();
+ from_string_mapping << indent() << "switch s {" << '\n';
+ indent_down();
vector<t_enum_value*> constants = tenum->get_constants();
vector<t_enum_value*>::iterator c_iter;
int value = -1;
+ indent_up();
for (c_iter = constants.begin(); c_iter != constants.end(); ++c_iter) {
value = (*c_iter)->get_value();
string iter_std_name(escape_string((*c_iter)->get_name()));
string iter_name((*c_iter)->get_name());
- f_types_ << indent() << " " << tenum_name << "_" << iter_name << ' ' << tenum_name << " = "
+ f_types_ << indent() << tenum_name << "_" << iter_name << ' ' << tenum_name << " = "
<< value << '\n';
// Dictionaries to/from string names of enums
- to_string_mapping << indent() << " case " << tenum_name << "_" << iter_name << ": return \""
+ to_string_mapping << indent() << "case " << tenum_name << "_" << iter_name << ": return \""
<< iter_std_name << "\"" << '\n';
if (iter_std_name != escape_string(iter_name)) {
- from_string_mapping << indent() << " case \"" << iter_std_name << "\", \""
+ from_string_mapping << indent() << "case \"" << iter_std_name << "\", \""
<< escape_string(iter_name) << "\": return " << tenum_name << "_"
<< iter_name << ", nil " << '\n';
} else {
- from_string_mapping << indent() << " case \"" << iter_std_name << "\": return " << tenum_name
+ from_string_mapping << indent() << "case \"" << iter_std_name << "\": return " << tenum_name
<< "_" << iter_name << ", nil " << '\n';
}
}
- to_string_mapping << indent() << " }" << '\n';
- to_string_mapping << indent() << " return \"<UNSET>\"" << '\n';
to_string_mapping << indent() << "}" << '\n';
- from_string_mapping << indent() << " }" << '\n';
- from_string_mapping << indent() << " return " << tenum_name << "(0),"
+ to_string_mapping << indent() << "return \"<UNSET>\"" << '\n';
+ indent_down();
+ to_string_mapping << indent() << "}" << '\n';
+ indent_up();
+ from_string_mapping << indent() << "}" << '\n';
+ from_string_mapping << indent() << "return " << tenum_name << "(0),"
<< " fmt.Errorf(\"not a valid " << tenum_name << " string\")" << '\n';
+ indent_down();
from_string_mapping << indent() << "}" << '\n';
f_types_ << ")" << '\n' << '\n' << to_string_mapping.str() << '\n' << from_string_mapping.str()
@@ -838,33 +846,49 @@
// Generate MarshalText
f_types_ << "func (p " << tenum_name << ") MarshalText() ([]byte, error) {" << '\n';
- f_types_ << "return []byte(p.String()), nil" << '\n';
+ indent_up();
+ f_types_ << indent() << "return []byte(p.String()), nil" << '\n';
+ indent_down();
f_types_ << "}" << '\n' << '\n';
// Generate UnmarshalText
f_types_ << "func (p *" << tenum_name << ") UnmarshalText(text []byte) error {" << '\n';
- f_types_ << "q, err := " << tenum_name << "FromString(string(text))" << '\n';
- f_types_ << "if (err != nil) {" << '\n' << "return err" << '\n' << "}" << '\n';
- f_types_ << "*p = q" << '\n';
- f_types_ << "return nil" << '\n';
+ indent_up();
+ f_types_ << indent() << "q, err := " << tenum_name << "FromString(string(text))" << '\n';
+ f_types_ << indent() << "if err != nil {" << '\n';
+ indent_up();
+ f_types_ << indent() << "return err" << '\n';
+ indent_down();
+ f_types_ << indent() << "}" << '\n';
+ f_types_ << indent() << "*p = q" << '\n';
+ f_types_ << indent() << "return nil" << '\n';
+ indent_down();
f_types_ << "}" << '\n' << '\n';
// Generate Scan for sql.Scanner interface
f_types_ << "func (p *" << tenum_name << ") Scan(value interface{}) error {" << '\n';
- f_types_ << "v, ok := value.(int64)" << '\n';
- f_types_ << "if !ok {" << '\n';
- f_types_ << "return errors.New(\"Scan value is not int64\")" << '\n';
- f_types_ << "}" << '\n';
- f_types_ << "*p = " << tenum_name << "(v)" << '\n';
- f_types_ << "return nil" << '\n';
+ indent_up();
+ f_types_ << indent() << "v, ok := value.(int64)" << '\n';
+ f_types_ << indent() << "if !ok {" << '\n';
+ indent_up();
+ f_types_ << indent() << "return errors.New(\"Scan value is not int64\")" << '\n';
+ indent_down();
+ f_types_ << indent() << "}" << '\n';
+ f_types_ << indent() << "*p = " << tenum_name << "(v)" << '\n';
+ f_types_ << indent() << "return nil" << '\n';
+ indent_down();
f_types_ << "}" << '\n' << '\n';
// Generate Value for driver.Valuer interface
- f_types_ << "func (p * " << tenum_name << ") Value() (driver.Value, error) {" << '\n';
- f_types_ << " if p == nil {" << '\n';
- f_types_ << " return nil, nil" << '\n';
- f_types_ << " }" << '\n';
- f_types_ << "return int64(*p), nil" << '\n';
+ f_types_ << "func (p *" << tenum_name << ") Value() (driver.Value, error) {" << '\n';
+ indent_up();
+ f_types_ << indent() << "if p == nil {" << '\n';
+ indent_up();
+ f_types_ << indent() << "return nil, nil" << '\n';
+ indent_down();
+ f_types_ << indent() << "}" << '\n';
+ f_types_ << indent() << "return int64(*p), nil" << '\n';
+ indent_down();
f_types_ << "}" << '\n';
}
@@ -1330,6 +1354,7 @@
}
out << '\n';
}
+ out << '\n';
// num_setable is used for deciding if Count* methods will be generated for union fields.
// This applies to all nullable fields including slices (used for set, list and binary) and maps, not just pointers.
@@ -1521,8 +1546,10 @@
<< '\n';
indent_up();
out << indent() << "if _, err := iprot.ReadStructBegin(ctx); err != nil {" << '\n';
- out << indent() << " return thrift.PrependError(fmt.Sprintf(\"%T read error: \", p), err)"
+ indent_up();
+ out << indent() << "return thrift.PrependError(fmt.Sprintf(\"%T read error: \", p), err)"
<< '\n';
+ indent_down();
out << indent() << "}" << '\n' << '\n';
// Required variables does not have IsSet functions, so we need tmp vars to check them.
@@ -1540,11 +1567,17 @@
// Read beginning field marker
out << indent() << "_, fieldTypeId, fieldId, err := iprot.ReadFieldBegin(ctx)" << '\n';
out << indent() << "if err != nil {" << '\n';
- out << indent() << " return thrift.PrependError(fmt.Sprintf("
+ indent_up();
+ out << indent() << "return thrift.PrependError(fmt.Sprintf("
"\"%T field %d read error: \", p, fieldId), err)" << '\n';
+ indent_down();
out << indent() << "}" << '\n';
// Check for field STOP marker and break
- out << indent() << "if fieldTypeId == thrift.STOP { break; }" << '\n';
+ out << indent() << "if fieldTypeId == thrift.STOP {" << '\n';
+ indent_up();
+ out << indent() << "break" << '\n';
+ indent_down();
+ out << indent() << "}" << '\n';
string thriftFieldTypeId;
// Generate deserialization code for known cases
@@ -1578,21 +1611,29 @@
}
out << indent() << "if fieldTypeId == " << thriftFieldTypeId << " {" << '\n';
- out << indent() << " if err := p." << field_method_prefix << field_method_suffix << "(ctx, iprot); err != nil {"
+ indent_up();
+ out << indent() << "if err := p." << field_method_prefix << field_method_suffix << "(ctx, iprot); err != nil {"
<< '\n';
- out << indent() << " return err" << '\n';
- out << indent() << " }" << '\n';
+ indent_up();
+ out << indent() << "return err" << '\n';
+ indent_down();
+ out << indent() << "}" << '\n';
// Mark required field as read
if ((*f_iter)->get_req() == t_field::T_REQUIRED) {
const string field_name(publicize(escape_string((*f_iter)->get_name())));
- out << indent() << " isset" << field_name << " = true" << '\n';
+ out << indent() << "isset" << field_name << " = true" << '\n';
}
+ indent_down();
out << indent() << "} else {" << '\n';
- out << indent() << " if err := iprot.Skip(ctx, fieldTypeId); err != nil {" << '\n';
- out << indent() << " return err" << '\n';
- out << indent() << " }" << '\n';
+ indent_up();
+ out << indent() << "if err := iprot.Skip(ctx, fieldTypeId); err != nil {" << '\n';
+ indent_up();
+ out << indent() << "return err" << '\n';
+ indent_down();
+ out << indent() << "}" << '\n';
+ indent_down();
out << indent() << "}" << '\n';
@@ -1607,7 +1648,9 @@
// Skip unknown fields in either case
out << indent() << "if err := iprot.Skip(ctx, fieldTypeId); err != nil {" << '\n';
- out << indent() << " return err" << '\n';
+ indent_up();
+ out << indent() << "return err" << '\n';
+ indent_down();
out << indent() << "}" << '\n';
// End switch default case
@@ -1618,13 +1661,17 @@
// Read field end marker
out << indent() << "if err := iprot.ReadFieldEnd(ctx); err != nil {" << '\n';
- out << indent() << " return err" << '\n';
+ indent_up();
+ out << indent() << "return err" << '\n';
+ indent_down();
out << indent() << "}" << '\n';
indent_down();
out << indent() << "}" << '\n';
out << indent() << "if err := iprot.ReadStructEnd(ctx); err != nil {" << '\n';
- out << indent() << " return thrift.PrependError(fmt.Sprintf("
+ indent_up();
+ out << indent() << "return thrift.PrependError(fmt.Sprintf("
"\"%T read struct end error: \", p), err)" << '\n';
+ indent_down();
out << indent() << "}" << '\n';
// Return error if any required fields are missing.
@@ -1632,8 +1679,10 @@
if ((*f_iter)->get_req() == t_field::T_REQUIRED) {
const string field_name(publicize(escape_string((*f_iter)->get_name())));
out << indent() << "if !isset" << field_name << "{" << '\n';
- out << indent() << " return thrift.NewTProtocolExceptionWithType(thrift.INVALID_DATA, "
+ indent_up();
+ out << indent() << "return thrift.NewTProtocolExceptionWithType(thrift.INVALID_DATA, "
"fmt.Errorf(\"Required field " << field_name << " is not set\"));" << '\n';
+ indent_down();
out << indent() << "}" << '\n';
}
}
@@ -1654,12 +1703,12 @@
field_method_suffix *= -1;
}
- out << indent() << "func (p *" << tstruct_name << ") " << field_method_prefix << field_method_suffix
+ out << indent() << "func (p *" << tstruct_name << ") " << field_method_prefix << field_method_suffix
<< "(ctx context.Context, iprot thrift.TProtocol) error {" << '\n';
indent_up();
generate_deserialize_field(out, *f_iter, false, "p.");
+ out << indent() << "return nil" << '\n';
indent_down();
- out << indent() << " return nil" << '\n';
out << indent() << "}" << '\n' << '\n';
}
}
@@ -1677,14 +1726,18 @@
indent_up();
if (tstruct->is_union() && uses_countsetfields) {
std::string tstruct_name(publicize(tstruct->get_name()));
- out << indent() << "if c := p.CountSetFields" << tstruct_name << "(); c != 1 {" << '\n'
- << indent()
- << " return fmt.Errorf(\"%T write union: exactly one field must be set (%d set)\", p, c)"
- << '\n' << indent() << "}" << '\n';
+ out << indent() << "if c := p.CountSetFields" << tstruct_name << "(); c != 1 {" << '\n';
+ indent_up();
+ out << indent() << "return fmt.Errorf(\"%T write union: exactly one field must be set (%d set)\", p, c)" << '\n';
+ indent_down();
+ out << indent() << "}" << '\n';
}
out << indent() << "if err := oprot.WriteStructBegin(ctx, \"" << name << "\"); err != nil {" << '\n';
- out << indent() << " return thrift.PrependError(fmt.Sprintf("
- "\"%T write struct begin error: \", p), err) }" << '\n';
+ indent_up();
+ out << indent() << "return thrift.PrependError(fmt.Sprintf("
+ "\"%T write struct begin error: \", p), err)" << '\n';
+ indent_down();
+ out << indent() << "}" << '\n';
string field_name;
string escape_field_name;
@@ -1716,9 +1769,15 @@
// Write the struct map
out << indent() << "if err := oprot.WriteFieldStop(ctx); err != nil {" << '\n';
- out << indent() << " return thrift.PrependError(\"write field stop error: \", err) }" << '\n';
+ indent_up();
+ out << indent() << "return thrift.PrependError(\"write field stop error: \", err)" << '\n';
+ indent_down();
+ out << indent() << "}" << '\n';
out << indent() << "if err := oprot.WriteStructEnd(ctx); err != nil {" << '\n';
- out << indent() << " return thrift.PrependError(\"write struct stop error: \", err) }" << '\n';
+ indent_up();
+ out << indent() << "return thrift.PrependError(\"write struct stop error: \", err)" << '\n';
+ indent_down();
+ out << indent() << "}" << '\n';
out << indent() << "return nil" << '\n';
indent_down();
out << indent() << "}" << '\n' << '\n';
@@ -1748,24 +1807,30 @@
out << indent() << "if err := oprot.WriteFieldBegin(ctx, \"" << escape_field_name << "\", "
<< type_to_enum((*f_iter)->get_type()) << ", " << field_id << "); err != nil {" << '\n';
- out << indent() << " return thrift.PrependError(fmt.Sprintf(\"%T write field begin error "
- << field_id << ":" << escape_field_name << ": \", p), err) }" << '\n';
+ indent_up();
+ out << indent() << "return thrift.PrependError(fmt.Sprintf(\"%T write field begin error "
+ << field_id << ":" << escape_field_name << ": \", p), err)" << '\n';
+ indent_down();
+ out << indent() << "}" << '\n';
// Write field contents
generate_serialize_field(out, *f_iter, "p.");
// Write field closer
out << indent() << "if err := oprot.WriteFieldEnd(ctx); err != nil {" << '\n';
- out << indent() << " return thrift.PrependError(fmt.Sprintf(\"%T write field end error "
- << field_id << ":" << escape_field_name << ": \", p), err) }" << '\n';
+ indent_up();
+ out << indent() << "return thrift.PrependError(fmt.Sprintf(\"%T write field end error "
+ << field_id << ":" << escape_field_name << ": \", p), err)" << '\n';
+ indent_down();
+ out << indent() << "}" << '\n';
if (field_required == t_field::T_OPTIONAL) {
indent_down();
out << indent() << "}" << '\n';
}
+ out << indent() << "return err" << '\n';
indent_down();
- out << indent() << " return err" << '\n';
out << indent() << "}" << '\n' << '\n';
}
}
@@ -1906,12 +1971,14 @@
extends = type_name(tservice->get_extends());
size_t index = extends.rfind(".");
+ indent_up();
if (index != string::npos) {
- extends_if = "\n" + indent() + " " + extends.substr(0, index + 1)
+ extends_if = "\n" + indent() + extends.substr(0, index + 1)
+ publicize(extends.substr(index + 1)) + "\n";
} else {
extends_if = "\n" + indent() + publicize(extends) + "\n";
}
+ indent_down();
}
f_types_ << indent() << "type " << interfaceName << " interface {" << extends_if;
@@ -2233,16 +2300,17 @@
f_remote << indent() << unused_protection; // filled in render_included_programs()
f_remote << indent() << '\n';
f_remote << indent() << "func Usage() {" << '\n';
- f_remote << indent() << " fmt.Fprintln(os.Stderr, \"Usage of \", os.Args[0], \" "
+ indent_up();
+ f_remote << indent() << "fmt.Fprintln(os.Stderr, \"Usage of \", os.Args[0], \" "
"[-h host:port] [-u url] [-f[ramed]] function [arg1 [arg2...]]:\")"
<< '\n';
- f_remote << indent() << " flag.PrintDefaults()" << '\n';
- f_remote << indent() << " fmt.Fprintln(os.Stderr, \"\\nFunctions:\")" << '\n';
+ f_remote << indent() << "flag.PrintDefaults()" << '\n';
+ f_remote << indent() << "fmt.Fprintln(os.Stderr, \"\\nFunctions:\")" << '\n';
string package_name_aliased = package_identifiers_[get_real_go_module(program_)];
for (f_iter = functions.begin(); f_iter != functions.end(); ++f_iter) {
- f_remote << " fmt.Fprintln(os.Stderr, \" " << (*f_iter)->get_returntype()->get_name() << " "
+ f_remote << indent() << "fmt.Fprintln(os.Stderr, \" " << (*f_iter)->get_returntype()->get_name() << " "
<< (*f_iter)->get_name() << "(";
t_struct* arg_struct = (*f_iter)->get_arglist();
const std::vector<t_field*>& args = arg_struct->get_members();
@@ -2262,25 +2330,32 @@
f_remote << ")\")" << '\n';
}
- f_remote << indent() << " fmt.Fprintln(os.Stderr)" << '\n';
- f_remote << indent() << " os.Exit(0)" << '\n';
+ f_remote << indent() << "fmt.Fprintln(os.Stderr)" << '\n';
+ f_remote << indent() << "os.Exit(0)" << '\n';
+ indent_down();
f_remote << indent() << "}" << '\n';
f_remote << indent() << '\n';
f_remote << indent() << "type httpHeaders map[string]string" << '\n';
f_remote << indent() << '\n';
f_remote << indent() << "func (h httpHeaders) String() string {" << '\n';
- f_remote << indent() << " var m map[string]string = h" << '\n';
- f_remote << indent() << " return fmt.Sprintf(\"%s\", m)" << '\n';
+ indent_up();
+ f_remote << indent() << "var m map[string]string = h" << '\n';
+ f_remote << indent() << "return fmt.Sprintf(\"%s\", m)" << '\n';
+ indent_down();
f_remote << indent() << "}" << '\n';
f_remote << indent() << '\n';
f_remote << indent() << "func (h httpHeaders) Set(value string) error {" << '\n';
- f_remote << indent() << " parts := strings.Split(value, \": \")" << '\n';
- f_remote << indent() << " if len(parts) != 2 {" << '\n';
- f_remote << indent() << " return fmt.Errorf(\"header should be of format 'Key: Value'\")" << '\n';
- f_remote << indent() << " }" << '\n';
- f_remote << indent() << " h[parts[0]] = parts[1]" << '\n';
- f_remote << indent() << " return nil" << '\n';
+ indent_up();
+ f_remote << indent() << "parts := strings.Split(value, \": \")" << '\n';
+ f_remote << indent() << "if len(parts) != 2 {" << '\n';
+ indent_up();
+ f_remote << indent() << "return fmt.Errorf(\"header should be of format 'Key: Value'\")" << '\n';
+ indent_down();
+ f_remote << indent() << "}" << '\n';
+ f_remote << indent() << "h[parts[0]] = parts[1]" << '\n';
+ f_remote << indent() << "return nil" << '\n';
+ indent_down();
f_remote << indent() << "}" << '\n';
f_remote << indent() << '\n';
@@ -2312,87 +2387,120 @@
f_remote << indent() << "flag.Parse()" << '\n';
f_remote << indent() << '\n';
f_remote << indent() << "if len(urlString) > 0 {" << '\n';
- f_remote << indent() << " var err error" << '\n';
- f_remote << indent() << " parsedUrl, err = url.Parse(urlString)" << '\n';
- f_remote << indent() << " if err != nil {" << '\n';
- f_remote << indent() << " fmt.Fprintln(os.Stderr, \"Error parsing URL: \", err)" << '\n';
- f_remote << indent() << " flag.Usage()" << '\n';
- f_remote << indent() << " }" << '\n';
- f_remote << indent() << " host = parsedUrl.Host" << '\n';
- f_remote << indent() << " useHttp = len(parsedUrl.Scheme) <= 0 || parsedUrl.Scheme == \"http\" || parsedUrl.Scheme == \"https\""
+ indent_up();
+ f_remote << indent() << "var err error" << '\n';
+ f_remote << indent() << "parsedUrl, err = url.Parse(urlString)" << '\n';
+ f_remote << indent() << "if err != nil {" << '\n';
+ indent_up();
+ f_remote << indent() << "fmt.Fprintln(os.Stderr, \"Error parsing URL: \", err)" << '\n';
+ f_remote << indent() << "flag.Usage()" << '\n';
+ indent_down();
+ f_remote << indent() << "}" << '\n';
+ f_remote << indent() << "host = parsedUrl.Host" << '\n';
+ f_remote << indent() << "useHttp = len(parsedUrl.Scheme) <= 0 || parsedUrl.Scheme == \"http\" || parsedUrl.Scheme == \"https\""
<< '\n';
+ indent_down();
f_remote << indent() << "} else if useHttp {" << '\n';
- f_remote << indent() << " _, err := url.Parse(fmt.Sprint(\"http://\", host, \":\", port))"
+ indent_up();
+ f_remote << indent() << "_, err := url.Parse(fmt.Sprint(\"http://\", host, \":\", port))"
<< '\n';
- f_remote << indent() << " if err != nil {" << '\n';
- f_remote << indent() << " fmt.Fprintln(os.Stderr, \"Error parsing URL: \", err)" << '\n';
- f_remote << indent() << " flag.Usage()" << '\n';
- f_remote << indent() << " }" << '\n';
+ f_remote << indent() << "if err != nil {" << '\n';
+ indent_up();
+ f_remote << indent() << "fmt.Fprintln(os.Stderr, \"Error parsing URL: \", err)" << '\n';
+ f_remote << indent() << "flag.Usage()" << '\n';
+ indent_down();
+ f_remote << indent() << "}" << '\n';
+ indent_down();
f_remote << indent() << "}" << '\n';
f_remote << indent() << '\n';
f_remote << indent() << "cmd := flag.Arg(0)" << '\n';
f_remote << indent() << "var err error" << '\n';
f_remote << indent() << "var cfg *thrift.TConfiguration = nil" << '\n';
f_remote << indent() << "if useHttp {" << '\n';
- f_remote << indent() << " trans, err = thrift.NewTHttpClient(parsedUrl.String())" << '\n';
- f_remote << indent() << " if len(headers) > 0 {" << '\n';
- f_remote << indent() << " httptrans := trans.(*thrift.THttpClient)" << '\n';
- f_remote << indent() << " for key, value := range headers {" << '\n';
- f_remote << indent() << " httptrans.SetHeader(key, value)" << '\n';
- f_remote << indent() << " }" << '\n';
- f_remote << indent() << " }" << '\n';
+ indent_up();
+ f_remote << indent() << "trans, err = thrift.NewTHttpClient(parsedUrl.String())" << '\n';
+ f_remote << indent() << "if len(headers) > 0 {" << '\n';
+ indent_up();
+ f_remote << indent() << "httptrans := trans.(*thrift.THttpClient)" << '\n';
+ f_remote << indent() << "for key, value := range headers {" << '\n';
+ indent_up();
+ f_remote << indent() << "httptrans.SetHeader(key, value)" << '\n';
+ indent_down();
+ f_remote << indent() << "}" << '\n';
+ indent_down();
+ f_remote << indent() << "}" << '\n';
+ indent_down();
f_remote << indent() << "} else {" << '\n';
- f_remote << indent() << " portStr := fmt.Sprint(port)" << '\n';
- f_remote << indent() << " if strings.Contains(host, \":\") {" << '\n';
- f_remote << indent() << " host, portStr, err = net.SplitHostPort(host)" << '\n';
- f_remote << indent() << " if err != nil {" << '\n';
- f_remote << indent() << " fmt.Fprintln(os.Stderr, \"error with host:\", err)"
+ indent_up();
+ f_remote << indent() << "portStr := fmt.Sprint(port)" << '\n';
+ f_remote << indent() << "if strings.Contains(host, \":\") {" << '\n';
+ indent_up();
+ f_remote << indent() << "host, portStr, err = net.SplitHostPort(host)" << '\n';
+ f_remote << indent() << "if err != nil {" << '\n';
+ indent_up();
+ f_remote << indent() << "fmt.Fprintln(os.Stderr, \"error with host:\", err)"
<< '\n';
- f_remote << indent() << " os.Exit(1)" << '\n';
- f_remote << indent() << " }" << '\n';
- f_remote << indent() << " }" << '\n';
- f_remote << indent() << " trans = thrift.NewTSocketConf(net.JoinHostPort(host, portStr), cfg)" << '\n';
- f_remote << indent() << " if err != nil {" << '\n';
- f_remote << indent() << " fmt.Fprintln(os.Stderr, \"error resolving address:\", err)" << '\n';
- f_remote << indent() << " os.Exit(1)" << '\n';
- f_remote << indent() << " }" << '\n';
- f_remote << indent() << " if framed {" << '\n';
- f_remote << indent() << " trans = thrift.NewTFramedTransportConf(trans, cfg)" << '\n';
- f_remote << indent() << " }" << '\n';
+ f_remote << indent() << "os.Exit(1)" << '\n';
+ indent_down();
+ f_remote << indent() << "}" << '\n';
+ indent_down();
+ f_remote << indent() << "}" << '\n';
+ f_remote << indent() << "trans = thrift.NewTSocketConf(net.JoinHostPort(host, portStr), cfg)" << '\n';
+ f_remote << indent() << "if err != nil {" << '\n';
+ indent_up();
+ f_remote << indent() << "fmt.Fprintln(os.Stderr, \"error resolving address:\", err)" << '\n';
+ f_remote << indent() << "os.Exit(1)" << '\n';
+ indent_down();
+ f_remote << indent() << "}" << '\n';
+ f_remote << indent() << "if framed {" << '\n';
+ indent_up();
+ f_remote << indent() << "trans = thrift.NewTFramedTransportConf(trans, cfg)" << '\n';
+ indent_down();
+ f_remote << indent() << "}" << '\n';
+ indent_down();
f_remote << indent() << "}" << '\n';
f_remote << indent() << "if err != nil {" << '\n';
- f_remote << indent() << " fmt.Fprintln(os.Stderr, \"Error creating transport\", err)" << '\n';
- f_remote << indent() << " os.Exit(1)" << '\n';
+ indent_up();
+ f_remote << indent() << "fmt.Fprintln(os.Stderr, \"Error creating transport\", err)" << '\n';
+ f_remote << indent() << "os.Exit(1)" << '\n';
+ indent_down();
f_remote << indent() << "}" << '\n';
f_remote << indent() << "defer trans.Close()" << '\n';
f_remote << indent() << "var protocolFactory thrift.TProtocolFactory" << '\n';
f_remote << indent() << "switch protocol {" << '\n';
f_remote << indent() << "case \"compact\":" << '\n';
- f_remote << indent() << " protocolFactory = thrift.NewTCompactProtocolFactoryConf(cfg)" << '\n';
- f_remote << indent() << " break" << '\n';
+ indent_up();
+ f_remote << indent() << "protocolFactory = thrift.NewTCompactProtocolFactoryConf(cfg)" << '\n';
+ indent_down();
f_remote << indent() << "case \"simplejson\":" << '\n';
- f_remote << indent() << " protocolFactory = thrift.NewTSimpleJSONProtocolFactoryConf(cfg)" << '\n';
- f_remote << indent() << " break" << '\n';
+ indent_up();
+ f_remote << indent() << "protocolFactory = thrift.NewTSimpleJSONProtocolFactoryConf(cfg)" << '\n';
f_remote << indent() << "case \"json\":" << '\n';
- f_remote << indent() << " protocolFactory = thrift.NewTJSONProtocolFactory()" << '\n';
- f_remote << indent() << " break" << '\n';
+ indent_up();
+ f_remote << indent() << "protocolFactory = thrift.NewTJSONProtocolFactory()" << '\n';
+ indent_down();
f_remote << indent() << "case \"binary\", \"\":" << '\n';
- f_remote << indent() << " protocolFactory = thrift.NewTBinaryProtocolFactoryConf(cfg)" << '\n';
- f_remote << indent() << " break" << '\n';
+ indent_up();
+ f_remote << indent() << "protocolFactory = thrift.NewTBinaryProtocolFactoryConf(cfg)" << '\n';
+ indent_down();
f_remote << indent() << "default:" << '\n';
- f_remote << indent() << " fmt.Fprintln(os.Stderr, \"Invalid protocol specified: \", protocol)"
+ indent_up();
+ f_remote << indent() << "fmt.Fprintln(os.Stderr, \"Invalid protocol specified: \", protocol)"
<< '\n';
- f_remote << indent() << " Usage()" << '\n';
- f_remote << indent() << " os.Exit(1)" << '\n';
+ f_remote << indent() << "Usage()" << '\n';
+ f_remote << indent() << "os.Exit(1)" << '\n';
+ indent_down();
f_remote << indent() << "}" << '\n';
f_remote << indent() << "iprot := protocolFactory.GetProtocol(trans)" << '\n';
f_remote << indent() << "oprot := protocolFactory.GetProtocol(trans)" << '\n';
f_remote << indent() << "client := " << package_name_aliased << ".New" << publicize(service_name_)
<< "Client(thrift.NewTStandardClient(iprot, oprot))" << '\n';
f_remote << indent() << "if err := trans.Open(); err != nil {" << '\n';
- f_remote << indent() << " fmt.Fprintln(os.Stderr, \"Error opening socket to \", "
+ indent_up();
+ f_remote << indent() << "fmt.Fprintln(os.Stderr, \"Error opening socket to \", "
"host, \":\", port, \" \", err)" << '\n';
- f_remote << indent() << " os.Exit(1)" << '\n';
+ f_remote << indent() << "os.Exit(1)" << '\n';
+ indent_down();
f_remote << indent() << "}" << '\n';
f_remote << indent() << '\n';
f_remote << indent() << "switch cmd {" << '\n';
@@ -2407,9 +2515,11 @@
f_remote << indent() << "case \"" << escape_string(funcName) << "\":" << '\n';
indent_up();
f_remote << indent() << "if flag.NArg() - 1 != " << num_args << " {" << '\n';
- f_remote << indent() << " fmt.Fprintln(os.Stderr, \"" << escape_string(pubName) << " requires "
+ indent_up();
+ f_remote << indent() << "fmt.Fprintln(os.Stderr, \"" << escape_string(pubName) << " requires "
<< num_args << " args\")" << '\n';
- f_remote << indent() << " flag.Usage()" << '\n';
+ f_remote << indent() << "flag.Usage()" << '\n';
+ indent_down();
f_remote << indent() << "}" << '\n';
for (std::vector<t_field*>::size_type i = 0; i < num_args; ++i) {
@@ -2421,8 +2531,10 @@
f_remote << indent() << "tmp" << i << ", err := (strconv.Atoi(flag.Arg(" << flagArg << ")))"
<< '\n';
f_remote << indent() << "if err != nil {" << '\n';
- f_remote << indent() << " Usage()" << '\n';
- f_remote << indent() << " return" << '\n';
+ indent_up();
+ f_remote << indent() << "Usage()" << '\n';
+ f_remote << indent() << "return" << '\n';
+ indent_down();
f_remote << indent() << "}" << '\n';
f_remote << indent() << "argvalue" << i << " := " << package_name_aliased << "."
<< publicize(the_type->get_name()) << "(tmp" << i << ")" << '\n';
@@ -2452,8 +2564,10 @@
f_remote << indent() << "tmp" << i << ", " << err << " := (strconv.Atoi(flag.Arg("
<< flagArg << ")))" << '\n';
f_remote << indent() << "if " << err << " != nil {" << '\n';
- f_remote << indent() << " Usage()" << '\n';
- f_remote << indent() << " return" << '\n';
+ indent_up();
+ f_remote << indent() << "Usage()" << '\n';
+ f_remote << indent() << "return" << '\n';
+ indent_down();
f_remote << indent() << "}" << '\n';
f_remote << indent() << "argvalue" << i << " := int8(tmp" << i << ")" << '\n';
break;
@@ -2462,8 +2576,10 @@
f_remote << indent() << "tmp" << i << ", " << err << " := (strconv.Atoi(flag.Arg("
<< flagArg << ")))" << '\n';
f_remote << indent() << "if " << err << " != nil {" << '\n';
- f_remote << indent() << " Usage()" << '\n';
- f_remote << indent() << " return" << '\n';
+ indent_up();
+ f_remote << indent() << "Usage()" << '\n';
+ f_remote << indent() << "return" << '\n';
+ indent_down();
f_remote << indent() << "}" << '\n';
f_remote << indent() << "argvalue" << i << " := int16(tmp" << i << ")" << '\n';
break;
@@ -2472,8 +2588,10 @@
f_remote << indent() << "tmp" << i << ", " << err << " := (strconv.Atoi(flag.Arg("
<< flagArg << ")))" << '\n';
f_remote << indent() << "if " << err << " != nil {" << '\n';
- f_remote << indent() << " Usage()" << '\n';
- f_remote << indent() << " return" << '\n';
+ indent_up();
+ f_remote << indent() << "Usage()" << '\n';
+ f_remote << indent() << "return" << '\n';
+ indent_down();
f_remote << indent() << "}" << '\n';
f_remote << indent() << "argvalue" << i << " := int32(tmp" << i << ")" << '\n';
break;
@@ -2482,8 +2600,10 @@
f_remote << indent() << "argvalue" << i << ", " << err
<< " := (strconv.ParseInt(flag.Arg(" << flagArg << "), 10, 64))" << '\n';
f_remote << indent() << "if " << err << " != nil {" << '\n';
- f_remote << indent() << " Usage()" << '\n';
- f_remote << indent() << " return" << '\n';
+ indent_up();
+ f_remote << indent() << "Usage()" << '\n';
+ f_remote << indent() << "return" << '\n';
+ indent_down();
f_remote << indent() << "}" << '\n';
break;
@@ -2491,8 +2611,10 @@
f_remote << indent() << "argvalue" << i << ", " << err
<< " := (strconv.ParseFloat(flag.Arg(" << flagArg << "), 64))" << '\n';
f_remote << indent() << "if " << err << " != nil {" << '\n';
- f_remote << indent() << " Usage()" << '\n';
- f_remote << indent() << " return" << '\n';
+ indent_up();
+ f_remote << indent() << "Usage()" << '\n';
+ f_remote << indent() << "return" << '\n';
+ indent_down();
f_remote << indent() << "}" << '\n';
break;
@@ -2500,8 +2622,10 @@
f_remote << indent() << "argvalue" << i << ", " << err
<< " := (thrift.ParseTuuid(flag.Arg(" << flagArg << ")))" << '\n';
f_remote << indent() << "if " << err << " != nil {" << '\n';
- f_remote << indent() << " Usage()" << '\n';
- f_remote << indent() << " return" << '\n';
+ indent_up();
+ f_remote << indent() << "Usage()" << '\n';
+ f_remote << indent() << "return" << '\n';
+ indent_down();
f_remote << indent() << "}" << '\n';
break;
@@ -2531,18 +2655,22 @@
f_remote << indent() << "_, " << err1 << " := " << mbTrans << ".WriteString(" << arg << ")"
<< '\n';
f_remote << indent() << "if " << err1 << " != nil {" << '\n';
- f_remote << indent() << " Usage()" << '\n';
- f_remote << indent() << " return" << '\n';
+ indent_up();
+ f_remote << indent() << "Usage()" << '\n';
+ f_remote << indent() << "return" << '\n';
+ indent_down();
f_remote << indent() << "}" << '\n';
f_remote << indent() << factory << " := thrift.NewTJSONProtocolFactory()" << '\n';
f_remote << indent() << jsProt << " := " << factory << ".GetProtocol(" << mbTrans << ")"
<< '\n';
f_remote << indent() << "argvalue" << i << " := " << tstruct_module << ".New" << tstruct_name
<< "()" << '\n';
- f_remote << indent() << err2 << " := argvalue" << i << "." << read_method_name_ << "(context.Background(), " << jsProt << ")" << '\n';
+ f_remote << indent() << err2 << " := argvalue" << i << "." << read_method_name_ << "(context.Background(), " << jsProt << ")" << '\n';
f_remote << indent() << "if " << err2 << " != nil {" << '\n';
- f_remote << indent() << " Usage()" << '\n';
- f_remote << indent() << " return" << '\n';
+ indent_up();
+ f_remote << indent() << "Usage()" << '\n';
+ f_remote << indent() << "return" << '\n';
+ indent_down();
f_remote << indent() << "}" << '\n';
} else if (the_type2->is_container() || the_type2->is_xception()) {
string arg(tmp("arg"));
@@ -2559,8 +2687,10 @@
f_remote << indent() << "_, " << err1 << " := " << mbTrans << ".WriteString(" << arg << ")"
<< '\n';
f_remote << indent() << "if " << err1 << " != nil { " << '\n';
- f_remote << indent() << " Usage()" << '\n';
- f_remote << indent() << " return" << '\n';
+ indent_up();
+ f_remote << indent() << "Usage()" << '\n';
+ f_remote << indent() << "return" << '\n';
+ indent_down();
f_remote << indent() << "}" << '\n';
f_remote << indent() << factory << " := thrift.NewTJSONProtocolFactory()" << '\n';
f_remote << indent() << jsProt << " := " << factory << ".GetProtocol(" << mbTrans << ")"
@@ -2570,8 +2700,10 @@
f_remote << indent() << err2 << " := containerStruct" << i << ".ReadField" << (i + 1) << "(context.Background(), "
<< jsProt << ")" << '\n';
f_remote << indent() << "if " << err2 << " != nil {" << '\n';
- f_remote << indent() << " Usage()" << '\n';
- f_remote << indent() << " return" << '\n';
+ indent_up();
+ f_remote << indent() << "Usage()" << '\n';
+ f_remote << indent() << "return" << '\n';
+ indent_down();
f_remote << indent() << "}" << '\n';
f_remote << indent() << "argvalue" << i << " := containerStruct" << i << "." << argName
<< '\n';
@@ -2641,10 +2773,13 @@
}
f_remote << indent() << "case \"\":" << '\n';
- f_remote << indent() << " Usage()" << '\n';
- f_remote << indent() << " break" << '\n';
+ indent_up();
+ f_remote << indent() << "Usage()" << '\n';
+ indent_down();
f_remote << indent() << "default:" << '\n';
- f_remote << indent() << " fmt.Fprintln(os.Stderr, \"Invalid function \", cmd)" << '\n';
+ indent_up();
+ f_remote << indent() << "fmt.Fprintln(os.Stderr, \"Invalid function \", cmd)" << '\n';
+ indent_down();
f_remote << indent() << "}" << '\n';
indent_down();
f_remote << indent() << "}" << '\n';
@@ -2697,78 +2832,95 @@
if (extends_processor.empty()) {
f_types_ << indent() << "type " << serviceName << "Processor struct {" << '\n';
- f_types_ << indent() << " processorMap map[string]thrift.TProcessorFunction" << '\n';
- f_types_ << indent() << " handler " << serviceName << '\n';
+ indent_up();
+ f_types_ << indent() << "processorMap map[string]thrift.TProcessorFunction" << '\n';
+ f_types_ << indent() << "handler " << serviceName << '\n';
+ indent_down();
f_types_ << indent() << "}" << '\n' << '\n';
f_types_ << indent() << "func (p *" << serviceName
<< "Processor) AddToProcessorMap(key string, processor thrift.TProcessorFunction) {"
<< '\n';
- f_types_ << indent() << " p.processorMap[key] = processor" << '\n';
+ indent_up();
+ f_types_ << indent() << "p.processorMap[key] = processor" << '\n';
+ indent_down();
f_types_ << indent() << "}" << '\n' << '\n';
f_types_ << indent() << "func (p *" << serviceName
<< "Processor) GetProcessorFunction(key string) "
"(processor thrift.TProcessorFunction, ok bool) {" << '\n';
- f_types_ << indent() << " processor, ok = p.processorMap[key]" << '\n';
- f_types_ << indent() << " return processor, ok" << '\n';
+ indent_up();
+ f_types_ << indent() << "processor, ok = p.processorMap[key]" << '\n';
+ f_types_ << indent() << "return processor, ok" << '\n';
+ indent_down();
f_types_ << indent() << "}" << '\n' << '\n';
f_types_ << indent() << "func (p *" << serviceName
<< "Processor) ProcessorMap() map[string]thrift.TProcessorFunction {" << '\n';
- f_types_ << indent() << " return p.processorMap" << '\n';
+ indent_up();
+ f_types_ << indent() << "return p.processorMap" << '\n';
+ indent_down();
f_types_ << indent() << "}" << '\n' << '\n';
f_types_ << indent() << "func New" << serviceName << "Processor(handler " << serviceName
<< ") *" << serviceName << "Processor {" << '\n' << '\n';
+ indent_up();
f_types_
- << indent() << " " << self << " := &" << serviceName
+ << indent() << self << " := &" << serviceName
<< "Processor{handler:handler, processorMap:make(map[string]thrift.TProcessorFunction)}"
<< '\n';
for (f_iter = functions.begin(); f_iter != functions.end(); ++f_iter) {
string escapedFuncName(escape_string((*f_iter)->get_name()));
- f_types_ << indent() << " " << self << ".processorMap[\"" << escapedFuncName << "\"] = &"
+ f_types_ << indent() << self << ".processorMap[\"" << escapedFuncName << "\"] = &"
<< pServiceName << "Processor" << publicize((*f_iter)->get_name())
<< "{handler:handler}" << '\n';
}
string x(tmp("x"));
f_types_ << indent() << "return " << self << '\n';
+ indent_down();
f_types_ << indent() << "}" << '\n' << '\n';
f_types_ << indent() << "func (p *" << serviceName
<< "Processor) Process(ctx context.Context, iprot, oprot thrift.TProtocol) (success bool, err "
"thrift.TException) {" << '\n';
- f_types_ << indent() << " name, _, seqId, err2 := iprot.ReadMessageBegin(ctx)" << '\n';
- f_types_ << indent() << " if err2 != nil { return false, thrift.WrapTException(err2) }" << '\n';
- f_types_ << indent() << " if processor, ok := p.GetProcessorFunction(name); ok {" << '\n';
- f_types_ << indent() << " return processor.Process(ctx, seqId, iprot, oprot)" << '\n';
- f_types_ << indent() << " }" << '\n';
- f_types_ << indent() << " iprot.Skip(ctx, thrift.STRUCT)" << '\n';
- f_types_ << indent() << " iprot.ReadMessageEnd(ctx)" << '\n';
- f_types_ << indent() << " " << x
+ indent_up();
+ f_types_ << indent() << "name, _, seqId, err2 := iprot.ReadMessageBegin(ctx)" << '\n';
+ f_types_ << indent() << "if err2 != nil { return false, thrift.WrapTException(err2) }" << '\n';
+ f_types_ << indent() << "if processor, ok := p.GetProcessorFunction(name); ok {" << '\n';
+ indent_up();
+ f_types_ << indent() << "return processor.Process(ctx, seqId, iprot, oprot)" << '\n';
+ indent_down();
+ f_types_ << indent() << "}" << '\n';
+ f_types_ << indent() << "iprot.Skip(ctx, thrift.STRUCT)" << '\n';
+ f_types_ << indent() << "iprot.ReadMessageEnd(ctx)" << '\n';
+ f_types_ << indent() << "" << x
<< " := thrift.NewTApplicationException(thrift.UNKNOWN_METHOD, \"Unknown function "
"\" + name)" << '\n';
- f_types_ << indent() << " oprot.WriteMessageBegin(ctx, name, thrift.EXCEPTION, seqId)" << '\n';
- f_types_ << indent() << " " << x << ".Write(ctx, oprot)" << '\n';
- f_types_ << indent() << " oprot.WriteMessageEnd(ctx)" << '\n';
- f_types_ << indent() << " oprot.Flush(ctx)" << '\n';
- f_types_ << indent() << " return false, " << x << '\n';
- f_types_ << indent() << "" << '\n';
+ f_types_ << indent() << "oprot.WriteMessageBegin(ctx, name, thrift.EXCEPTION, seqId)" << '\n';
+ f_types_ << indent() << "" << x << ".Write(ctx, oprot)" << '\n';
+ f_types_ << indent() << "oprot.WriteMessageEnd(ctx)" << '\n';
+ f_types_ << indent() << "oprot.Flush(ctx)" << '\n';
+ f_types_ << indent() << "return false, " << x << '\n';
+ indent_down();
f_types_ << indent() << "}" << '\n' << '\n';
} else {
f_types_ << indent() << "type " << serviceName << "Processor struct {" << '\n';
- f_types_ << indent() << " *" << extends_processor << '\n';
+ indent_up();
+ f_types_ << indent() << "*" << extends_processor << '\n';
+ indent_down();
f_types_ << indent() << "}" << '\n' << '\n';
f_types_ << indent() << "func New" << serviceName << "Processor(handler " << serviceName
<< ") *" << serviceName << "Processor {" << '\n';
- f_types_ << indent() << " " << self << " := &" << serviceName << "Processor{"
+ indent_up();
+ f_types_ << indent() << self << " := &" << serviceName << "Processor{"
<< extends_processor_new << "(handler)}" << '\n';
for (f_iter = functions.begin(); f_iter != functions.end(); ++f_iter) {
string escapedFuncName(escape_string((*f_iter)->get_name()));
- f_types_ << indent() << " " << self << ".AddToProcessorMap(\"" << escapedFuncName
+ f_types_ << indent() << self << ".AddToProcessorMap(\"" << escapedFuncName
<< "\", &" << pServiceName << "Processor" << publicize((*f_iter)->get_name())
<< "{handler:handler})" << '\n';
}
- f_types_ << indent() << " return " << self << '\n';
+ f_types_ << indent() << "return " << self << '\n';
+ indent_down();
f_types_ << indent() << "}" << '\n' << '\n';
}
@@ -2795,7 +2947,9 @@
// t_struct* xs = tfunction->get_xceptions();
// const std::vector<t_field*>& xceptions = xs->get_members();
f_types_ << indent() << "type " << processorName << " struct {" << '\n';
- f_types_ << indent() << " handler " << publicize(tservice->get_name()) << '\n';
+ indent_up();
+ f_types_ << indent() << "handler " << publicize(tservice->get_name()) << '\n';
+ indent_down();
f_types_ << indent() << "}" << '\n' << '\n';
f_types_ << indent() << "func (p *" << processorName
<< ") Process(ctx context.Context, seqId int32, iprot, oprot thrift.TProtocol) (success bool, err "
@@ -2807,7 +2961,7 @@
f_types_ << indent() << "var " << write_err << " error" << '\n';
}
f_types_ << indent() << "args := " << argsname << "{}" << '\n';
- f_types_ << indent() << "if err2 := args." << read_method_name_ << "(ctx, iprot); err2 != nil {" << '\n';
+ f_types_ << indent() << "if err2 := args." << read_method_name_ << "(ctx, iprot); err2 != nil {" << '\n';
indent_up();
f_types_ << indent() << "iprot.ReadMessageEnd(ctx)" << '\n';
if (!tfunction->is_oneway()) {
@@ -3096,7 +3250,7 @@
string type_name = inkey ? type_to_go_key_type(tfield->get_type())
: type_to_go_type(tfield->get_type());
- out << "var " << tfield->get_name() << " " << type_name << '\n';
+ out << indent() << "var " << tfield->get_name() << " " << type_name << '\n';
}
indent(out) << "if v, err := iprot.";
@@ -3154,10 +3308,13 @@
}
out << "; err != nil {" << '\n';
+ indent_up();
out << indent() << "return thrift.PrependError(\"error reading field " << tfield->get_key()
<< ": \", err)" << '\n';
- out << "} else {" << '\n';
+ indent_down();
+ out << indent() << "} else {" << '\n';
+ indent_up();
string wrap;
if (type->is_enum() || orig_type->is_typedef()) {
@@ -3174,7 +3331,8 @@
indent(out) << name << " = " << maybe_address << "temp" << '\n';
}
- out << "}" << '\n';
+ indent_down();
+ out << indent() << "}" << '\n';
} else {
throw "INVALID TYPE IN generate_deserialize_field '" + type->get_name() + "' for field '"
+ tfield->get_name() + "'";
@@ -3193,9 +3351,11 @@
out << indent() << prefix << eq << (pointer_field ? "&" : "");
generate_go_struct_initializer(out, tstruct);
- out << indent() << "if err := " << prefix << "." << read_method_name_ << "(ctx, iprot); err != nil {" << '\n';
- out << indent() << " return thrift.PrependError(fmt.Sprintf(\"%T error reading struct: \", "
+ out << indent() << "if err := " << prefix << "." << read_method_name_ << "(ctx, iprot); err != nil {" << '\n';
+ indent_up();
+ out << indent() << "return thrift.PrependError(fmt.Sprintf(\"%T error reading struct: \", "
<< prefix << "), err)" << '\n';
+ indent_down();
out << indent() << "}" << '\n';
}
@@ -3219,31 +3379,37 @@
if (ttype->is_map()) {
out << indent() << "_, _, size, err := iprot.ReadMapBegin(ctx)" << '\n';
out << indent() << "if err != nil {" << '\n';
- out << indent() << " return thrift.PrependError(\"error reading map begin: \", err)" << '\n';
+ indent_up();
+ out << indent() << "return thrift.PrependError(\"error reading map begin: \", err)" << '\n';
+ indent_down();
out << indent() << "}" << '\n';
out << indent() << "tMap := make(" << type_to_go_type(orig_type) << ", size)" << '\n';
- out << indent() << prefix << eq << " " << (pointer_field ? "&" : "") << "tMap" << '\n';
+ out << indent() << prefix << eq << (pointer_field ? "&" : "") << "tMap" << '\n';
} else if (ttype->is_set()) {
out << indent() << "_, size, err := iprot.ReadSetBegin(ctx)" << '\n';
out << indent() << "if err != nil {" << '\n';
- out << indent() << " return thrift.PrependError(\"error reading set begin: \", err)" << '\n';
+ indent_up();
+ out << indent() << "return thrift.PrependError(\"error reading set begin: \", err)" << '\n';
+ indent_down();
out << indent() << "}" << '\n';
out << indent() << "tSet := make(" << type_to_go_type(orig_type) << ", 0, size)" << '\n';
- out << indent() << prefix << eq << " " << (pointer_field ? "&" : "") << "tSet" << '\n';
+ out << indent() << prefix << eq << (pointer_field ? "&" : "") << "tSet" << '\n';
} else if (ttype->is_list()) {
out << indent() << "_, size, err := iprot.ReadListBegin(ctx)" << '\n';
out << indent() << "if err != nil {" << '\n';
- out << indent() << " return thrift.PrependError(\"error reading list begin: \", err)" << '\n';
+ indent_up();
+ out << indent() << "return thrift.PrependError(\"error reading list begin: \", err)" << '\n';
+ indent_down();
out << indent() << "}" << '\n';
out << indent() << "tSlice := make(" << type_to_go_type(orig_type) << ", 0, size)" << '\n';
- out << indent() << prefix << eq << " " << (pointer_field ? "&" : "") << "tSlice" << '\n';
+ out << indent() << prefix << eq << (pointer_field ? "&" : "") << "tSlice" << '\n';
} else {
throw "INVALID TYPE IN generate_deserialize_container '" + ttype->get_name() + "' for prefix '"
+ prefix + "'";
}
// For loop iterates over elements
- out << indent() << "for i := 0; i < size; i ++ {" << '\n';
+ out << indent() << "for i := 0; i < size; i++ {" << '\n';
indent_up();
if (pointer_field) {
@@ -3263,15 +3429,21 @@
// Read container end
if (ttype->is_map()) {
out << indent() << "if err := iprot.ReadMapEnd(ctx); err != nil {" << '\n';
- out << indent() << " return thrift.PrependError(\"error reading map end: \", err)" << '\n';
+ indent_up();
+ out << indent() << "return thrift.PrependError(\"error reading map end: \", err)" << '\n';
+ indent_down();
out << indent() << "}" << '\n';
} else if (ttype->is_set()) {
out << indent() << "if err := iprot.ReadSetEnd(ctx); err != nil {" << '\n';
- out << indent() << " return thrift.PrependError(\"error reading set end: \", err)" << '\n';
+ indent_up();
+ out << indent() << "return thrift.PrependError(\"error reading set end: \", err)" << '\n';
+ indent_down();
out << indent() << "}" << '\n';
} else if (ttype->is_list()) {
out << indent() << "if err := iprot.ReadListEnd(ctx); err != nil {" << '\n';
- out << indent() << " return thrift.PrependError(\"error reading list end: \", err)" << '\n';
+ indent_up();
+ out << indent() << "return thrift.PrependError(\"error reading list end: \", err)" << '\n';
+ indent_down();
out << indent() << "}" << '\n';
}
}
@@ -3407,9 +3579,12 @@
}
out << "; err != nil {" << '\n';
+ indent_up();
out << indent() << "return thrift.PrependError(fmt.Sprintf(\"%T."
<< escape_string(tfield->get_name()) << " (" << tfield->get_key()
- << ") field write error: \", p), err) }" << '\n';
+ << ") field write error: \", p), err)" << '\n';
+ indent_down();
+ out << indent() << "}" << '\n';
} else {
throw "compiler error: Invalid type in generate_serialize_field '" + type->get_name()
+ "' for field '" + name + "'";
@@ -3425,8 +3600,10 @@
void t_go_generator::generate_serialize_struct(ostream& out, t_struct* tstruct, string prefix) {
(void)tstruct;
out << indent() << "if err := " << prefix << "." << write_method_name_ << "(ctx, oprot); err != nil {" << '\n';
- out << indent() << " return thrift.PrependError(fmt.Sprintf(\"%T error writing struct: \", "
+ indent_up();
+ out << indent() << "return thrift.PrependError(fmt.Sprintf(\"%T error writing struct: \", "
<< prefix << "), err)" << '\n';
+ indent_down();
out << indent() << "}" << '\n';
}
@@ -3442,19 +3619,25 @@
<< type_to_enum(((t_map*)ttype)->get_key_type()) << ", "
<< type_to_enum(((t_map*)ttype)->get_val_type()) << ", "
<< "len(" << prefix << ")); err != nil {" << '\n';
- out << indent() << " return thrift.PrependError(\"error writing map begin: \", err)" << '\n';
+ indent_up();
+ out << indent() << "return thrift.PrependError(\"error writing map begin: \", err)" << '\n';
+ indent_down();
out << indent() << "}" << '\n';
} else if (ttype->is_set()) {
out << indent() << "if err := oprot.WriteSetBegin(ctx, "
<< type_to_enum(((t_set*)ttype)->get_elem_type()) << ", "
<< "len(" << prefix << ")); err != nil {" << '\n';
- out << indent() << " return thrift.PrependError(\"error writing set begin: \", err)" << '\n';
+ indent_up();
+ out << indent() << "return thrift.PrependError(\"error writing set begin: \", err)" << '\n';
+ indent_down();
out << indent() << "}" << '\n';
} else if (ttype->is_list()) {
out << indent() << "if err := oprot.WriteListBegin(ctx, "
<< type_to_enum(((t_list*)ttype)->get_elem_type()) << ", "
<< "len(" << prefix << ")); err != nil {" << '\n';
- out << indent() << " return thrift.PrependError(\"error writing list begin: \", err)" << '\n';
+ indent_up();
+ out << indent() << "return thrift.PrependError(\"error writing list begin: \", err)" << '\n';
+ indent_down();
out << indent() << "}" << '\n';
} else {
throw "compiler error: Invalid type in generate_serialize_container '" + ttype->get_name()
@@ -3513,15 +3696,21 @@
if (ttype->is_map()) {
out << indent() << "if err := oprot.WriteMapEnd(ctx); err != nil {" << '\n';
- out << indent() << " return thrift.PrependError(\"error writing map end: \", err)" << '\n';
+ indent_up();
+ out << indent() << "return thrift.PrependError(\"error writing map end: \", err)" << '\n';
+ indent_down();
out << indent() << "}" << '\n';
} else if (ttype->is_set()) {
out << indent() << "if err := oprot.WriteSetEnd(ctx); err != nil {" << '\n';
- out << indent() << " return thrift.PrependError(\"error writing set end: \", err)" << '\n';
+ indent_up();
+ out << indent() << "return thrift.PrependError(\"error writing set end: \", err)" << '\n';
+ indent_down();
out << indent() << "}" << '\n';
} else if (ttype->is_list()) {
out << indent() << "if err := oprot.WriteListEnd(ctx); err != nil {" << '\n';
- out << indent() << " return thrift.PrependError(\"error writing list end: \", err)" << '\n';
+ indent_up();
+ out << indent() << "return thrift.PrependError(\"error writing list end: \", err)" << '\n';
+ indent_down();
out << indent() << "}" << '\n';
}
}
diff --git a/compiler/cpp/src/thrift/generate/t_go_generator.h b/compiler/cpp/src/thrift/generate/t_go_generator.h
index 55f544e..1efa32d 100644
--- a/compiler/cpp/src/thrift/generate/t_go_generator.h
+++ b/compiler/cpp/src/thrift/generate/t_go_generator.h
@@ -286,6 +286,10 @@
static bool is_pointer_field(t_field* tfield, bool in_container = false);
+ std::string indent_str() const {
+ return "\t";
+ }
+
private:
std::string gen_package_prefix_;
std::string gen_thrift_import_;