From: David Reiss Date: Mon, 28 Jan 2008 20:46:57 +0000 (+0000) Subject: Thrift/Ruby: Allow some thrift exceptions to use standard Ruby syntax. X-Git-Tag: 0.2.0~1027 X-Git-Url: https://source.supwisdom.com/gerrit/gitweb?a=commitdiff_plain;h=3e6583365a3e0106cb656765290e768f5b5077ef;p=common%2Fthrift.git Thrift/Ruby: Allow some thrift exceptions to use standard Ruby syntax. Submitted by William Morgan. Approved by Kevin Clark. git-svn-id: https://svn.apache.org/repos/asf/incubator/thrift/trunk@665445 13f79535-47bb-0310-9956-ffa450edef68 --- diff --git a/compiler/cpp/src/generate/t_rb_generator.cc b/compiler/cpp/src/generate/t_rb_generator.cc index 56690e8a..171e623b 100644 --- a/compiler/cpp/src/generate/t_rb_generator.cc +++ b/compiler/cpp/src/generate/t_rb_generator.cc @@ -285,6 +285,10 @@ void t_rb_generator::generate_rb_struct(std::ofstream& out, t_struct* tstruct, b indent_up(); indent(out) << "include ThriftStruct" << endl; + if (is_exception) { + generate_rb_simple_exception_constructor(out, tstruct); + } + generate_accessors(out, tstruct); generate_field_defns(out, tstruct); @@ -292,6 +296,23 @@ void t_rb_generator::generate_rb_struct(std::ofstream& out, t_struct* tstruct, b indent(out) << "end" << endl << endl; } +void t_rb_generator::generate_rb_simple_exception_constructor(std::ofstream& out, t_struct* tstruct) { + const vector& members = tstruct->get_members(); + + if (members.size() == 1) { + vector::const_iterator m_iter = members.begin(); + + if ((*m_iter)->get_type()->is_string()) { + indent(out) << "def initialize(message)" << endl; + indent_up(); + indent(out) << "super(message)" << endl; + indent(out) << "self." << (*m_iter)->get_name() << " = message" << endl; + indent_down(); + indent(out) << "end" << endl << endl; + } + } +} + void t_rb_generator::generate_accessors(std::ofstream& out, t_struct* tstruct) { const vector& members = tstruct->get_members(); vector::const_iterator m_iter; diff --git a/compiler/cpp/src/generate/t_rb_generator.h b/compiler/cpp/src/generate/t_rb_generator.h index dc8d4a0c..0cee5e44 100644 --- a/compiler/cpp/src/generate/t_rb_generator.h +++ b/compiler/cpp/src/generate/t_rb_generator.h @@ -56,6 +56,7 @@ class t_rb_generator : public t_oop_generator { void generate_rb_struct_reader(std::ofstream& out, t_struct* tstruct); void generate_rb_struct_writer(std::ofstream& out, t_struct* tstruct); void generate_rb_function_helpers(t_function* tfunction); + void generate_rb_simple_exception_constructor(std::ofstream& out, t_struct* tstruct); void generate_accessors (std::ofstream& out, t_struct* tstruct); void generate_field_defns (std::ofstream& out, t_struct* tstruct); void generate_field_data (std::ofstream& out, t_type* field_type, const std::string& field_name, t_const_value* field_value);