// Generate deserialization code for known cases
for (f_iter = fields.begin(); f_iter != fields.end(); ++f_iter) {
- out << indent() << "(Fid == " << (*f_iter)->get_key() << ") and (Ftype == "
+ out << indent() << "(Fid == " << (*f_iter)->get_key() << "), (Ftype == "
<< type_to_enum((*f_iter)->get_type()) << ") ->" << endl;
indent_up();
export_function(*f_iter, "send_");
indent(f_service_) <<
- "send_" << function_signature(*f_iter) << " ->" << endl;
+ function_signature(*f_iter, "send_") << " ->" << endl;
indent_up();
std::string argsname = capitalize((*f_iter)->get_name() + "_args");
indent() << "Oprot = This#" << service_name_ << ".oprot," << endl <<
indent() << "Seqid = This#" << service_name_ << ".seqid," << endl <<
indent() << "?R3(Oprot, writeMessageBegin, \"" << (*f_iter)->get_name() << "\", ?tMessageType_CALL, Seqid)," << endl <<
- indent() << "Args = #" << (*f_iter)->get_name() << "_args{";
+ indent() << "Args = #" << uncapitalize(funname) << "_args{";
bool first = true;
for (fld_iter = fields.begin(); fld_iter != fields.end(); ++fld_iter) {
<< "=" << capitalize((*fld_iter)->get_name());
}
f_service_ << "}," << endl;
- indent(f_service_) << (*f_iter)->get_name() << "_args_write(Args, Oprot)," << endl;
+ indent(f_service_) << uncapitalize(funname) << "_args_write(Args, Oprot)," << endl;
// Write to the stream
f_service_ <<
f_service_ <<
indent() << "Seqid, Oprot, % suppress unused warnings" << endl;
- string argsname = tfunction->get_name() + "_args";
- string resultname = tfunction->get_name() + "_result";
+ string ucfunname = uncapitalize(tfunction->get_name());
+ string argsname = ucfunname + "_args";
+ string resultname = ucfunname + "_result";
f_service_ <<
indent() << "_Args = " << argsname << "_read(Iprot)," << endl <<
if (!tfunction->is_async() && !tfunction->get_returntype()->is_void()) {
f_service_<< "Res = ";
}
- f_service_ << "HandlerModule:" << tfunction->get_name() << "(";
+ f_service_ << "HandlerModule:" << atomize(tfunction->get_name()) << "(";
bool first = true;
for (f_iter = fields.begin(); f_iter != fields.end(); ++f_iter) {
} else {
f_service_ << ", ";
}
- f_service_ << "_Args#" << tfunction->get_name() << "_args." << (*f_iter)->get_name();
+ f_service_ << "_Args#" << argsname << "." << (*f_iter)->get_name();
}
f_service_ << ")," << endl;
if (!tfunction->is_async() && !tfunction->get_returntype()->is_void()) {
if (!tfunction->is_async()) {
f_service_ <<
indent() << "?R3(Oprot, writeMessageBegin, \"" << tfunction->get_name() << "\", ?tMessageType_REPLY, Seqid)," << endl <<
- indent() << tfunction->get_name() << "_result_write(Result, Oprot)," << endl;
+ indent() << ucfunname << "_result_write(Result, Oprot)," << endl;
}
indent(f_service_) << "Result" << endl;
indent_down();
string t_erl_generator::function_signature(t_function* tfunction,
string prefix) {
return
- prefix + tfunction->get_name() +
+ atomize(prefix + tfunction->get_name()) +
"(This" + capitalize(argument_list(tfunction->get_arglist())) + ")";
}
} else {
export_lines_ << ", ";
}
- export_lines_ << name << "/" << num;
+
+ export_lines_ << atomize(name) << "/" << num;
}
void t_erl_generator::export_types_function(t_function* tfunction,
class t_erl_generator : public t_oop_generator {
public:
t_erl_generator(t_program* program) :
- t_oop_generator(program)
+ t_oop_generator(program)
{
program_name_[0] = tolower(program_name_[0]);
service_name_[0] = tolower(service_name_[0]);
*/
void generate_deserialize_field (std::ostream &out,
- t_field* tfield,
+ t_field* tfield,
std::string prefix="",
bool inclass=false);
-
+
void generate_deserialize_struct (std::ostream &out,
t_struct* tstruct,
std::string prefix="");
-
+
void generate_deserialize_container (std::ostream &out,
t_type* ttype,
std::string prefix="");
-
+
void generate_deserialize_set_element (std::ostream &out,
t_set* tset,
std::string prefix="");
return in;
}
+ std::string atomize(std::string in) {
+ if (isupper(in[0])) {
+ return "'" + in + "'";
+ } else {
+ return in;
+ }
+ }
+
private:
/**
/**
* write out headers and footers for hrl files
*/
-
+
void hrl_header(std::ostream& out, std::string name);
- void hrl_footer(std::ostream& out, std::string name);
+ void hrl_footer(std::ostream& out, std::string name);
/**
* stuff to spit out at the top of generated files
std::ofstream f_types_file_;
std::ofstream f_types_hrl_file_;
- std::ofstream f_consts_;
+ std::ofstream f_consts_;
std::ostringstream f_service_;
std::ofstream f_service_file_;
std::ofstream f_service_hrl_;