indent() << " return" << endl <<
indent() << "}" << endl <<
indent() << "if p.SeqId != seqId {" << endl <<
- indent() << " err = thrift.NewTApplicationException(thrift.BAD_SEQUENCE_ID, \"ping failed: out of sequence response\")" << 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 << " := New" << publicize(resultname) << "()" << endl <<
f_service_ << "args." << publicize(variable_name_to_go_name((*f_iter)->get_name()));
}
- f_service_ << "); err2 != nil {" << endl <<
- indent() << "switch v := err2.(type) {" << endl;
-
+ f_service_ << "); err2 != nil {" << endl;
+
t_struct* exceptions = tfunction->get_xceptions();
const vector<t_field*>& x_fields = exceptions->get_members();
- vector<t_field*>::const_iterator xf_iter;
+ if( ! x_fields.empty()) {
+ f_service_ << indent() << "switch v := err2.(type) {" << endl;
- for (xf_iter = x_fields.begin(); xf_iter != x_fields.end(); ++xf_iter) {
- f_service_ <<
- indent() << " case *" << type_name((*xf_iter)->get_type()) << ":" << endl <<
- indent() << "result." << publicize(variable_name_to_go_name((*xf_iter)->get_name())) << " = v" << endl;
+ vector<t_field*>::const_iterator xf_iter;
+
+ for (xf_iter = x_fields.begin(); xf_iter != x_fields.end(); ++xf_iter) {
+ f_service_ <<
+ indent() << " case *" << type_name((*xf_iter)->get_type()) << ":" << endl <<
+ indent() << "result." << publicize(variable_name_to_go_name((*xf_iter)->get_name())) << " = v" << endl;
+ }
+
+ f_service_ <<
+ indent() << " default:" << endl;
}
f_service_ <<
- indent() << " default:" << endl <<
indent() << " x := thrift.NewTApplicationException(thrift.INTERNAL_ERROR, \"Internal error processing " << escape_string(tfunction->get_name()) << ": \" + 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 <<
- indent() << " return false, err2" << endl <<
- indent() << "}" << endl;
+ indent() << " return false, err2" << endl ;
+
+ if( ! x_fields.empty()) {
+ f_service_ <<
+ indent() << "}" << endl;
+ }
f_service_ <<
indent() << "}" << endl <<
*/
import (
+ "crypto/tls"
"fmt"
"git.apache.org/thrift.git/lib/go/thrift"
"tutorial"
- "crypto/tls"
)
func handleClient(client *tutorial.CalculatorClient) (err error) {
work.Op = tutorial.Operation_DIVIDE
work.Num1 = 1
work.Num2 = 0
- quotient, ouch, err := client.Calculate(1, work)
+ quotient, err := client.Calculate(1, work)
if err != nil {
fmt.Println("Error during operation:", err)
return err
- } else if ouch != nil {
- fmt.Println("Invalid operation:", ouch)
+ //} else if ouch != nil {
+ // fmt.Println("Invalid operation:", ouch)
} else {
fmt.Println("Whoa we can divide by 0 with new value:", quotient)
}
work.Op = tutorial.Operation_SUBTRACT
work.Num1 = 15
work.Num2 = 10
- diff, ouch, err := client.Calculate(1, work)
+ diff, err := client.Calculate(1, work)
if err != nil {
fmt.Println("Error during operation:", err)
return err
- } else if ouch != nil {
- fmt.Println("Invalid operation:", ouch)
+ //} else if ouch != nil {
+ // fmt.Println("Invalid operation:", ouch)
} else {
fmt.Print("15-10=", diff, "\n")
}
return num1 + num2, nil
}
-func (p *CalculatorHandler) Calculate(logid int32, w *tutorial.Work) (val int32, ouch *tutorial.InvalidOperation, err error) {
+func (p *CalculatorHandler) Calculate(logid int32, w *tutorial.Work) (val int32, err error) {
fmt.Print("calculate(", logid, ", {", w.Op, ",", w.Num1, ",", w.Num2, "})\n")
switch w.Op {
case tutorial.Operation_ADD:
break
case tutorial.Operation_DIVIDE:
if w.Num2 == 0 {
- ouch = tutorial.NewInvalidOperation()
+ ouch := tutorial.NewInvalidOperation()
ouch.What = int32(w.Op)
ouch.Why = "Cannot divide by 0"
+ err = ouch
return
}
val = w.Num1 / w.Num2
break
default:
- ouch = tutorial.NewInvalidOperation()
+ ouch := tutorial.NewInvalidOperation()
ouch.What = int32(w.Op)
ouch.Why = "Unknown operation"
+ err = ouch
return
}
entry := shared.NewSharedStruct()
}
*/
p.log[k] = entry
- return val, ouch, err
+ return val, err
}
func (p *CalculatorHandler) GetStruct(key int32) (*shared.SharedStruct, error) {
*/
import (
+ "crypto/tls"
"fmt"
"git.apache.org/thrift.git/lib/go/thrift"
"tutorial"
- "crypto/tls"
)
func runServer(transportFactory thrift.TTransportFactory, protocolFactory thrift.TProtocolFactory, addr string, secure bool) error {