throw "compiler error: no const of base type " + tbase;
}
} else if (type->is_enum()) {
- render << "(" << type->get_name() << ")" << value->get_integer();
+ render << "(" << type_name(type) << ")" << value->get_integer();
} else {
string t = tmp("tmp");
indent(out) << type_name(type) << " " << t << ";" << endl;
generate_deserialize_struct(out, (t_struct*)type, name);
} else if (type->is_container()) {
generate_deserialize_container(out, type, name);
- } else if (type->is_base_type() || type->is_enum()) {
+ } else if (type->is_base_type()) {
indent(out) <<
"xfer += iprot->";
-
- if (type->is_base_type()) {
- t_base_type::t_base tbase = ((t_base_type*)type)->get_base();
- switch (tbase) {
- case t_base_type::TYPE_VOID:
- throw "compiler error: cannot serialize void field in a struct: " +
- name;
- break;
- case t_base_type::TYPE_STRING:
- out << "readString(" << name << ");";
- break;
- case t_base_type::TYPE_BOOL:
- out << "readBool(" << name << ");";
- break;
- case t_base_type::TYPE_BYTE:
- out << "readByte(" << name << ");";
- break;
- case t_base_type::TYPE_I16:
- out << "readI16(" << name << ");";
- break;
- case t_base_type::TYPE_I32:
- out << "readI32(" << name << ");";
- break;
- case t_base_type::TYPE_I64:
- out << "readI64(" << name << ");";
- break;
- case t_base_type::TYPE_DOUBLE:
- out << "readDouble(" << name << ");";
- break;
- default:
- throw "compiler error: no C++ reader for base type " + tbase + name;
- }
- } else if (type->is_enum()) {
- out << "readI32((int32_t&)" << name << ");";
+ t_base_type::t_base tbase = ((t_base_type*)type)->get_base();
+ switch (tbase) {
+ case t_base_type::TYPE_VOID:
+ throw "compiler error: cannot serialize void field in a struct: " + name;
+ break;
+ case t_base_type::TYPE_STRING:
+ out << "readString(" << name << ");";
+ break;
+ case t_base_type::TYPE_BOOL:
+ out << "readBool(" << name << ");";
+ break;
+ case t_base_type::TYPE_BYTE:
+ out << "readByte(" << name << ");";
+ break;
+ case t_base_type::TYPE_I16:
+ out << "readI16(" << name << ");";
+ break;
+ case t_base_type::TYPE_I32:
+ out << "readI32(" << name << ");";
+ break;
+ case t_base_type::TYPE_I64:
+ out << "readI64(" << name << ");";
+ break;
+ case t_base_type::TYPE_DOUBLE:
+ out << "readDouble(" << name << ");";
+ break;
+ default:
+ throw "compiler error: no C++ reader for base type " + tbase + name;
}
out <<
endl;
+ } else if (type->is_enum()) {
+ string t = tmp("ecast");
+ out <<
+ indent() << "int32_t " << t << ";" << endl <<
+ indent() << "xfer += iprot->readI32(" << t << ");" << endl <<
+ indent() << name << " = (" << type->get_name() << ")" << t << ";" << endl;
} else {
printf("DO NOT KNOW HOW TO DESERIALIZE FIELD '%s' TYPE '%s'\n",
tfield->get_name().c_str(), type_name(type).c_str());