std::string render_member_value(t_field * field);
std::string render_member_requiredness(t_field * field);
- std::string render_default_value(t_type* type);
+// std::string render_default_value(t_type* type);
+ std::string render_default_value(t_field * field);
std::string render_const_value(t_type* type, t_const_value* value);
std::string render_type_term(t_type* ttype, bool expand_structs, bool extended_info = false);
private:
+ bool has_default_value(t_field *);
+
/**
* add function to export list
*/
}
-string t_erl_generator::render_default_value(t_type* type) {
+string t_erl_generator::render_default_value(t_field* field) {
+ t_type *type = field->get_type();
if (type->is_struct() || type->is_xception()) {
return "#" + uncapitalize(type->get_name()) + "{}";
} else if (type->is_map()) {
t_base_type::t_base tbase = ((t_base_type*)type)->get_base();
switch (tbase) {
case t_base_type::TYPE_STRING:
- return "string()";
+ return "string() | binary()";
case t_base_type::TYPE_BOOL:
return "boolean()";
case t_base_type::TYPE_BYTE:
for (vector<t_field*>::const_iterator m_iter = members.begin(); m_iter != members.end();) {
generate_erl_struct_member(buf, *m_iter);
if ( ++m_iter != members.end() ) {
- buf << ", " << endl << field_indent;
+ buf << "," << endl << field_indent;
}
}
buf << "}).";
void t_erl_generator::generate_erl_struct_member(ostream & out, t_field * tmember)
{
out << uncapitalize(tmember->get_name());
- out << " = " << render_member_value(tmember);
+ if (has_default_value(tmember))
+ out << " = " << render_member_value(tmember);
out << " :: " << render_member_type(tmember);
}
+bool t_erl_generator::has_default_value(t_field * field) {
+ t_type *type = field->get_type();
+ if (!field->get_value()) {
+ if (type->is_struct() || type->is_xception() || type->is_map() ||
+ type->is_set() || type->is_list()) {
+ return true;
+ } else {
+ return false;
+ }
+ } else {
+ return true;
+ }
+}
+
string t_erl_generator::render_member_value(t_field * field) {
if (!field->get_value()) {
- return render_default_value(field->get_type());
+ return render_default_value(field);
} else {
return render_const_value(field->get_type(), field->get_value());
}
std::stringstream buf;
buf << "{struct, [";
+ string field_indent(buf.str().size(), ' ');
t_struct::members_type const& fields = static_cast<t_struct*>(type)->get_members();
t_struct::members_type::const_iterator i, end = fields.end();
}
if ( ++i != end ) {
- buf << ", ";
+ buf << "," << endl << field_indent;
}
}
--- /dev/null
+struct StructA
+{
+ 1: string a,
+ 2: binary b,
+ 3: optional string c,
+ 4: optional binary d,
+ 5: required string e,
+ 6: required binary f,
+ 7: string g = "foo",
+ 8: i32 h,
+ 9: optional i32 i,
+ 10: required i32 j,
+ 11: required i32 k = 5,
+ 12: double l,
+ 13: optional double m,
+ 14: required double n,
+ 15: double o = 3.14159,
+ 16: list<string> string_list,
+ 17: list<byte> byte_list = [1, 2, 3],
+ 18: set<string> string_set,
+ 19: map<string, string> string_map
+}