diff options
author | Roger Meier <roger@apache.org> | 2014-10-21 21:53:05 +0200 |
---|---|---|
committer | Roger Meier <roger@apache.org> | 2014-10-21 21:53:05 +0200 |
commit | d5c7a0f6f7e20bd1cddf98e61a2d1173669206ae (patch) | |
tree | 31bc7bceaf759ceb23e25b80d78abfe669245e56 /compiler/cpp | |
parent | cb0754db1e73e7ea347aae07e0ef1de9792ef99e (diff) | |
download | thrift-d5c7a0f6f7e20bd1cddf98e61a2d1173669206ae.tar.gz |
format: spaces instead of tabs
Diffstat (limited to 'compiler/cpp')
-rw-r--r-- | compiler/cpp/src/generate/t_json_generator.cc | 696 |
1 files changed, 348 insertions, 348 deletions
diff --git a/compiler/cpp/src/generate/t_json_generator.cc b/compiler/cpp/src/generate/t_json_generator.cc index 794e69e5f..14a2f89f7 100644 --- a/compiler/cpp/src/generate/t_json_generator.cc +++ b/compiler/cpp/src/generate/t_json_generator.cc @@ -45,429 +45,429 @@ static const string quot = "\""; class t_json_generator : public t_generator { public: - t_json_generator( - t_program* program, - const std::map<std::string, std::string>& parsed_options, - const std::string& option_string) - : t_generator(program) - { - out_dir_base_ = "gen-json"; - } - - virtual ~t_json_generator() {} - - /** - * Init and close methods - */ - - void init_generator(); - void close_generator(); - - void generate_typedef(t_typedef* ttypedef); - void generate_enum(t_enum* tenum); - void generate_program(); - void generate_consts(vector<t_const*>); - void generate_function(t_function * tfunc); - void generate_field(t_field * field); - - void generate_service(t_service* tservice); - void generate_struct(t_struct* tstruct); + t_json_generator( + t_program* program, + const std::map<std::string, std::string>& parsed_options, + const std::string& option_string) + : t_generator(program) + { + out_dir_base_ = "gen-json"; + } + + virtual ~t_json_generator() {} + + /** + * Init and close methods + */ + + void init_generator(); + void close_generator(); + + void generate_typedef(t_typedef* ttypedef); + void generate_enum(t_enum* tenum); + void generate_program(); + void generate_consts(vector<t_const*>); + void generate_function(t_function * tfunc); + void generate_field(t_field * field); + + void generate_service(t_service* tservice); + void generate_struct(t_struct* tstruct); private: - std::ofstream f_json_; - std::stack<bool> _commaNeeded; - string get_type_name(t_type* type); - string get_const_value(t_const_value* val); - - void start_object(); - void start_array(); - void write_key(string key, string val); - void write_key_int(string key, int val); - void end_object(bool newLine); - void end_array(bool newLine); - void write_comma_if_needed(); - void indicate_comma_needed(); - string escapeJsonString(const string& input); - - void merge_includes(t_program*); + std::ofstream f_json_; + std::stack<bool> _commaNeeded; + string get_type_name(t_type* type); + string get_const_value(t_const_value* val); + + void start_object(); + void start_array(); + void write_key(string key, string val); + void write_key_int(string key, int val); + void end_object(bool newLine); + void end_array(bool newLine); + void write_comma_if_needed(); + void indicate_comma_needed(); + string escapeJsonString(const string& input); + + void merge_includes(t_program*); }; void t_json_generator::init_generator() { - MKDIR(get_out_dir().c_str()); + MKDIR(get_out_dir().c_str()); - string f_json_name = get_out_dir() + program_->get_name() + ".json"; - f_json_.open(f_json_name.c_str()); + string f_json_name = get_out_dir() + program_->get_name() + ".json"; + f_json_.open(f_json_name.c_str()); - //Merge all included programs into this one so we can output one big file. - merge_includes(program_); + //Merge all included programs into this one so we can output one big file. + merge_includes(program_); } string t_json_generator::escapeJsonString(const string& input) { - std::ostringstream ss; - for (std::string::const_iterator iter = input.begin(); iter != input.end(); iter++) { - switch (*iter) { - case '\\': ss << "\\\\"; break; - case '"': ss << "\\\""; break; - case '/': ss << "\\/"; break; - case '\b': ss << "\\b"; break; - case '\f': ss << "\\f"; break; - case '\n': ss << "\\n"; break; - case '\r': ss << "\\r"; break; - case '\t': ss << "\\t"; break; - default: ss << *iter; break; - } - } - return ss.str(); + std::ostringstream ss; + for (std::string::const_iterator iter = input.begin(); iter != input.end(); iter++) { + switch (*iter) { + case '\\': ss << "\\\\"; break; + case '"': ss << "\\\""; break; + case '/': ss << "\\/"; break; + case '\b': ss << "\\b"; break; + case '\f': ss << "\\f"; break; + case '\n': ss << "\\n"; break; + case '\r': ss << "\\r"; break; + case '\t': ss << "\\t"; break; + default: ss << *iter; break; + } + } + return ss.str(); } void t_json_generator::start_object(){ - f_json_ << "{"; - _commaNeeded.push(false); + f_json_ << "{"; + _commaNeeded.push(false); } void t_json_generator::start_array(){ - f_json_ << "["; - _commaNeeded.push(false); + f_json_ << "["; + _commaNeeded.push(false); } void t_json_generator::write_comma_if_needed(){ - if (_commaNeeded.top()) f_json_ << ","; + if (_commaNeeded.top()) f_json_ << ","; } void t_json_generator::indicate_comma_needed(){ - _commaNeeded.pop(); - _commaNeeded.push(true); + _commaNeeded.pop(); + _commaNeeded.push(true); } void t_json_generator::write_key(string key, string val){ - write_comma_if_needed(); - f_json_ << quot << key << quot << ":" << quot << escapeJsonString(val) << quot; - indicate_comma_needed(); + write_comma_if_needed(); + f_json_ << quot << key << quot << ":" << quot << escapeJsonString(val) << quot; + indicate_comma_needed(); } void t_json_generator::write_key_int(string key, int val){ - write_comma_if_needed(); - f_json_ << quot << key << quot << ":" << quot << val << quot; - indicate_comma_needed(); + write_comma_if_needed(); + f_json_ << quot << key << quot << ":" << quot << val << quot; + indicate_comma_needed(); } void t_json_generator::end_object(bool newLine){ - f_json_ << "}"; - if (newLine) f_json_ << endl; - _commaNeeded.pop(); + f_json_ << "}"; + if (newLine) f_json_ << endl; + _commaNeeded.pop(); } void t_json_generator::end_array(bool newLine){ - f_json_ << "]"; - if (newLine) f_json_ << endl; - _commaNeeded.pop(); + f_json_ << "]"; + if (newLine) f_json_ << endl; + _commaNeeded.pop(); } void t_json_generator::close_generator() { - f_json_.close(); + f_json_.close(); } void t_json_generator::merge_includes(t_program * program) { - vector<t_program*> includes = program->get_includes(); - vector<t_program*>::iterator inc_iter; - for (inc_iter = includes.begin(); inc_iter != includes.end(); ++inc_iter){ - t_program* include = *inc_iter; - //recurse in case we get crazy - merge_includes(include); - //merge enums - vector<t_enum*> enums = include->get_enums(); - vector<t_enum*>::iterator en_iter; - for (en_iter = enums.begin(); en_iter != enums.end(); ++en_iter) { - program->add_enum(*en_iter); - } - //merge typedefs - vector<t_typedef*> typedefs = include->get_typedefs(); - vector<t_typedef*>::iterator td_iter; - for (td_iter = typedefs.begin(); td_iter != typedefs.end(); ++td_iter) { - program->add_typedef(*td_iter); - } - //merge structs - vector<t_struct*> objects = include->get_objects(); - vector<t_struct*>::iterator o_iter; - for (o_iter = objects.begin(); o_iter != objects.end(); ++o_iter) { - program->add_struct(*o_iter); - } - //merge constants - vector<t_const*> consts = include->get_consts(); - vector<t_const*>::iterator c_iter; - for (c_iter = consts.begin(); c_iter != consts.end(); ++c_iter){ - program->add_const(*c_iter); - } - - // Generate services - vector<t_service*> services = include->get_services(); - vector<t_service*>::iterator sv_iter; - for (sv_iter = services.begin(); sv_iter != services.end(); ++sv_iter) { - program->add_service(*sv_iter); - } - } + vector<t_program*> includes = program->get_includes(); + vector<t_program*>::iterator inc_iter; + for (inc_iter = includes.begin(); inc_iter != includes.end(); ++inc_iter){ + t_program* include = *inc_iter; + //recurse in case we get crazy + merge_includes(include); + //merge enums + vector<t_enum*> enums = include->get_enums(); + vector<t_enum*>::iterator en_iter; + for (en_iter = enums.begin(); en_iter != enums.end(); ++en_iter) { + program->add_enum(*en_iter); + } + //merge typedefs + vector<t_typedef*> typedefs = include->get_typedefs(); + vector<t_typedef*>::iterator td_iter; + for (td_iter = typedefs.begin(); td_iter != typedefs.end(); ++td_iter) { + program->add_typedef(*td_iter); + } + //merge structs + vector<t_struct*> objects = include->get_objects(); + vector<t_struct*>::iterator o_iter; + for (o_iter = objects.begin(); o_iter != objects.end(); ++o_iter) { + program->add_struct(*o_iter); + } + //merge constants + vector<t_const*> consts = include->get_consts(); + vector<t_const*>::iterator c_iter; + for (c_iter = consts.begin(); c_iter != consts.end(); ++c_iter){ + program->add_const(*c_iter); + } + + // Generate services + vector<t_service*> services = include->get_services(); + vector<t_service*>::iterator sv_iter; + for (sv_iter = services.begin(); sv_iter != services.end(); ++sv_iter) { + program->add_service(*sv_iter); + } + } } void t_json_generator::generate_program() { - // Initialize the generator - init_generator(); - start_object(); - - write_key("name", program_->get_name()); - if (program_->has_doc()) write_key("doc", program_->get_doc()); - - // Generate enums - vector<t_enum*> enums = program_->get_enums(); - vector<t_enum*>::iterator en_iter; - f_json_ << ",\"enums\":"; - start_array(); - f_json_ << endl; - for (en_iter = enums.begin(); en_iter != enums.end(); ++en_iter) { - write_comma_if_needed(); - generate_enum(*en_iter); - indicate_comma_needed(); - } - end_array(true); - - // Generate typedefs - vector<t_typedef*> typedefs = program_->get_typedefs(); - vector<t_typedef*>::iterator td_iter; - f_json_ << ",\"typedefs\":"; - start_array(); - f_json_ << endl; - for (td_iter = typedefs.begin(); td_iter != typedefs.end(); ++td_iter) { - write_comma_if_needed(); - generate_typedef(*td_iter); - indicate_comma_needed(); - } - end_array(true); - - // Generate structs, exceptions, and unions in declared order - vector<t_struct*> objects = program_->get_objects(); - vector<t_struct*>::iterator o_iter; - f_json_ << ",\"structs\":"; - start_array(); - f_json_ << endl; - for (o_iter = objects.begin(); o_iter != objects.end(); ++o_iter) { - write_comma_if_needed(); - if ((*o_iter)->is_xception()) { - generate_xception(*o_iter); - } - else { - generate_struct(*o_iter); - } - indicate_comma_needed(); - } - end_array(true); - - // Generate constants - vector<t_const*> consts = program_->get_consts(); - generate_consts(consts); - - // Generate services - vector<t_service*> services = program_->get_services(); - vector<t_service*>::iterator sv_iter; - f_json_ << ",\"services\":"; - start_array(); - f_json_ << endl; - for (sv_iter = services.begin(); sv_iter != services.end(); ++sv_iter) { - write_comma_if_needed(); - service_name_ = get_service_name(*sv_iter); - generate_service(*sv_iter); - indicate_comma_needed(); - } - end_array(false); - end_object(true); - // Close the generator - close_generator(); + // Initialize the generator + init_generator(); + start_object(); + + write_key("name", program_->get_name()); + if (program_->has_doc()) write_key("doc", program_->get_doc()); + + // Generate enums + vector<t_enum*> enums = program_->get_enums(); + vector<t_enum*>::iterator en_iter; + f_json_ << ",\"enums\":"; + start_array(); + f_json_ << endl; + for (en_iter = enums.begin(); en_iter != enums.end(); ++en_iter) { + write_comma_if_needed(); + generate_enum(*en_iter); + indicate_comma_needed(); + } + end_array(true); + + // Generate typedefs + vector<t_typedef*> typedefs = program_->get_typedefs(); + vector<t_typedef*>::iterator td_iter; + f_json_ << ",\"typedefs\":"; + start_array(); + f_json_ << endl; + for (td_iter = typedefs.begin(); td_iter != typedefs.end(); ++td_iter) { + write_comma_if_needed(); + generate_typedef(*td_iter); + indicate_comma_needed(); + } + end_array(true); + + // Generate structs, exceptions, and unions in declared order + vector<t_struct*> objects = program_->get_objects(); + vector<t_struct*>::iterator o_iter; + f_json_ << ",\"structs\":"; + start_array(); + f_json_ << endl; + for (o_iter = objects.begin(); o_iter != objects.end(); ++o_iter) { + write_comma_if_needed(); + if ((*o_iter)->is_xception()) { + generate_xception(*o_iter); + } + else { + generate_struct(*o_iter); + } + indicate_comma_needed(); + } + end_array(true); + + // Generate constants + vector<t_const*> consts = program_->get_consts(); + generate_consts(consts); + + // Generate services + vector<t_service*> services = program_->get_services(); + vector<t_service*>::iterator sv_iter; + f_json_ << ",\"services\":"; + start_array(); + f_json_ << endl; + for (sv_iter = services.begin(); sv_iter != services.end(); ++sv_iter) { + write_comma_if_needed(); + service_name_ = get_service_name(*sv_iter); + generate_service(*sv_iter); + indicate_comma_needed(); + } + end_array(false); + end_object(true); + // Close the generator + close_generator(); } void t_json_generator::generate_typedef(t_typedef* ttypedef){ - start_object(); - write_key("name", ttypedef->get_name()); - write_key("type", get_type_name(ttypedef->get_true_type())); - if (ttypedef->has_doc()) write_key("doc", ttypedef->get_doc()); - end_object(true); + start_object(); + write_key("name", ttypedef->get_name()); + write_key("type", get_type_name(ttypedef->get_true_type())); + if (ttypedef->has_doc()) write_key("doc", ttypedef->get_doc()); + end_object(true); } void t_json_generator::generate_consts(vector<t_const*> consts){ - vector<t_const*>::iterator c_iter; - f_json_ << ",\"constants\":"; - start_array(); - f_json_ << endl; - for (c_iter = consts.begin(); c_iter != consts.end(); ++c_iter) { - write_comma_if_needed(); - indicate_comma_needed(); - start_object(); - t_const* con = (*c_iter); - write_key("name", con->get_name()); - write_key("type", get_type_name(con->get_type())); - if (con->has_doc()) write_key("doc", con->get_doc()); - write_key("value", get_const_value(con->get_value())); - end_object(true); - } - end_array(true); + vector<t_const*>::iterator c_iter; + f_json_ << ",\"constants\":"; + start_array(); + f_json_ << endl; + for (c_iter = consts.begin(); c_iter != consts.end(); ++c_iter) { + write_comma_if_needed(); + indicate_comma_needed(); + start_object(); + t_const* con = (*c_iter); + write_key("name", con->get_name()); + write_key("type", get_type_name(con->get_type())); + if (con->has_doc()) write_key("doc", con->get_doc()); + write_key("value", get_const_value(con->get_value())); + end_object(true); + } + end_array(true); } void t_json_generator::generate_enum(t_enum* tenum) { - start_object(); - write_key("name", tenum->get_name()); - if (tenum->has_doc()) write_key("doc", tenum->get_doc()); - f_json_ << ",\"members\":"; - start_array(); - vector<t_enum_value*> values = tenum->get_constants(); - vector<t_enum_value*>::iterator val_iter; - for (val_iter = values.begin(); val_iter != values.end(); ++val_iter) { - t_enum_value* val = (*val_iter); - write_comma_if_needed(); - start_object(); - write_key("name", val->get_name()); - write_key_int("value", val->get_value()); - if (val->has_doc()) write_key("doc", val->get_doc()); - end_object(false); - indicate_comma_needed(); - } - end_array(false); - end_object(true); + start_object(); + write_key("name", tenum->get_name()); + if (tenum->has_doc()) write_key("doc", tenum->get_doc()); + f_json_ << ",\"members\":"; + start_array(); + vector<t_enum_value*> values = tenum->get_constants(); + vector<t_enum_value*>::iterator val_iter; + for (val_iter = values.begin(); val_iter != values.end(); ++val_iter) { + t_enum_value* val = (*val_iter); + write_comma_if_needed(); + start_object(); + write_key("name", val->get_name()); + write_key_int("value", val->get_value()); + if (val->has_doc()) write_key("doc", val->get_doc()); + end_object(false); + indicate_comma_needed(); + } + end_array(false); + end_object(true); } void t_json_generator::generate_struct(t_struct* tstruct){ - start_object(); - write_key("name", tstruct->get_name()); - if (tstruct->has_doc()) write_key("doc", tstruct->get_doc()); - if (tstruct->is_xception()) write_key("isException", "true"); - vector<t_field*> members = tstruct->get_members(); - vector<t_field*>::iterator mem_iter = members.begin(); - f_json_ << ",\"fields\":"; - start_array(); - for (; mem_iter != members.end(); mem_iter++) { - generate_field((*mem_iter)); - } - end_array(false); - end_object(true); + start_object(); + write_key("name", tstruct->get_name()); + if (tstruct->has_doc()) write_key("doc", tstruct->get_doc()); + if (tstruct->is_xception()) write_key("isException", "true"); + vector<t_field*> members = tstruct->get_members(); + vector<t_field*>::iterator mem_iter = members.begin(); + f_json_ << ",\"fields\":"; + start_array(); + for (; mem_iter != members.end(); mem_iter++) { + generate_field((*mem_iter)); + } + end_array(false); + end_object(true); } void t_json_generator::generate_service(t_service* tservice){ - start_object(); - write_key("name", tservice->get_name()); - if (tservice->get_extends()) write_key("extendsType", tservice->get_extends()->get_name()); - if (tservice->has_doc()) write_key("doc", tservice->get_doc()); - vector<t_function*> functions = tservice->get_functions(); - vector<t_function*>::iterator fn_iter = functions.begin(); - f_json_ << ",\"functions\":"; - start_array(); - for (; fn_iter != functions.end(); fn_iter++) { - t_function* func = (*fn_iter); - write_comma_if_needed(); - indicate_comma_needed(); - generate_function(func); - } - end_array(false); - end_object(true); + start_object(); + write_key("name", tservice->get_name()); + if (tservice->get_extends()) write_key("extendsType", tservice->get_extends()->get_name()); + if (tservice->has_doc()) write_key("doc", tservice->get_doc()); + vector<t_function*> functions = tservice->get_functions(); + vector<t_function*>::iterator fn_iter = functions.begin(); + f_json_ << ",\"functions\":"; + start_array(); + for (; fn_iter != functions.end(); fn_iter++) { + t_function* func = (*fn_iter); + write_comma_if_needed(); + indicate_comma_needed(); + generate_function(func); + } + end_array(false); + end_object(true); } void t_json_generator::generate_function(t_function* tfunc){ - start_object(); - write_key("name", tfunc->get_name()); - write_key("returnType", get_type_name(tfunc->get_returntype())); - if (tfunc->is_oneway()) write_key("oneWay", "true"); - if (tfunc->has_doc()) write_key("doc", tfunc->get_doc()); - vector<t_field*> members = tfunc->get_arglist()->get_members(); - vector<t_field*>::iterator mem_iter = members.begin(); - f_json_ << ",\"arguments\":"; - start_array(); - for (; mem_iter != members.end(); mem_iter++) { - generate_field((*mem_iter)); - } - end_array(false); - - vector<t_field*> excepts = tfunc->get_xceptions()->get_members(); - vector<t_field*>::iterator ex_iter = excepts.begin(); - f_json_ << ",\"exceptions\":"; - start_array(); - for (; ex_iter != excepts.end(); ex_iter++) { - generate_field((*ex_iter)); - } - end_array(false); - end_object(false); + start_object(); + write_key("name", tfunc->get_name()); + write_key("returnType", get_type_name(tfunc->get_returntype())); + if (tfunc->is_oneway()) write_key("oneWay", "true"); + if (tfunc->has_doc()) write_key("doc", tfunc->get_doc()); + vector<t_field*> members = tfunc->get_arglist()->get_members(); + vector<t_field*>::iterator mem_iter = members.begin(); + f_json_ << ",\"arguments\":"; + start_array(); + for (; mem_iter != members.end(); mem_iter++) { + generate_field((*mem_iter)); + } + end_array(false); + + vector<t_field*> excepts = tfunc->get_xceptions()->get_members(); + vector<t_field*>::iterator ex_iter = excepts.begin(); + f_json_ << ",\"exceptions\":"; + start_array(); + for (; ex_iter != excepts.end(); ex_iter++) { + generate_field((*ex_iter)); + } + end_array(false); + end_object(false); } void t_json_generator::generate_field(t_field * field){ - write_comma_if_needed(); - start_object(); - write_key_int("index", field->get_key()); - write_key("name", field->get_name()); - write_key("type", get_type_name(field->get_type())); - if (field->has_doc()) write_key("doc", field->get_doc()); - switch (field->get_req()) { + write_comma_if_needed(); + start_object(); + write_key_int("index", field->get_key()); + write_key("name", field->get_name()); + write_key("type", get_type_name(field->get_type())); + if (field->has_doc()) write_key("doc", field->get_doc()); + switch (field->get_req()) { case t_field::T_REQUIRED: write_key("required", "true"); break; default: write_key("required", "false"); - } - if (field->get_value()) - write_key("default", get_const_value(field->get_value())); + } + if (field->get_value()) + write_key("default", get_const_value(field->get_value())); - end_object(false); - indicate_comma_needed(); + end_object(false); + indicate_comma_needed(); } string t_json_generator::get_const_value(t_const_value* tvalue){ - switch (tvalue->get_type()) { - case t_const_value::CV_INTEGER: - return tvalue->get_string(); - case t_const_value::CV_DOUBLE: - return tvalue->get_string(); - case t_const_value::CV_STRING: - return tvalue->get_string(); - case t_const_value::CV_LIST: - { - string list = "["; - vector<t_const_value*> list_elems = tvalue->get_list();; - vector<t_const_value*>::iterator list_iter; - bool first = true; - for (list_iter = list_elems.begin(); list_iter != list_elems.end(); list_iter++) { - if (!first)list += ","; - first = false; - list += get_const_value(*list_iter); - } - return list + "]"; - } - case t_const_value::CV_IDENTIFIER: - return tvalue->get_identifier_name(); - case t_const_value::CV_MAP: - map<t_const_value*, t_const_value*> map_elems = tvalue->get_map(); - map<t_const_value*, t_const_value*>::iterator map_iter; - string map = "["; - bool first = true; - for (map_iter = map_elems.begin(); map_iter != map_elems.end(); map_iter++) { - if (!first) map += ","; - first = false; - map += get_const_value(map_iter->first) + ":"; - map += get_const_value(map_iter->second); - } - return map + "]"; - } - return "UNKNOWN"; + switch (tvalue->get_type()) { + case t_const_value::CV_INTEGER: + return tvalue->get_string(); + case t_const_value::CV_DOUBLE: + return tvalue->get_string(); + case t_const_value::CV_STRING: + return tvalue->get_string(); + case t_const_value::CV_LIST: + { + string list = "["; + vector<t_const_value*> list_elems = tvalue->get_list();; + vector<t_const_value*>::iterator list_iter; + bool first = true; + for (list_iter = list_elems.begin(); list_iter != list_elems.end(); list_iter++) { + if (!first)list += ","; + first = false; + list += get_const_value(*list_iter); + } + return list + "]"; + } + case t_const_value::CV_IDENTIFIER: + return tvalue->get_identifier_name(); + case t_const_value::CV_MAP: + map<t_const_value*, t_const_value*> map_elems = tvalue->get_map(); + map<t_const_value*, t_const_value*>::iterator map_iter; + string map = "["; + bool first = true; + for (map_iter = map_elems.begin(); map_iter != map_elems.end(); map_iter++) { + if (!first) map += ","; + first = false; + map += get_const_value(map_iter->first) + ":"; + map += get_const_value(map_iter->second); + } + return map + "]"; + } + return "UNKNOWN"; } string t_json_generator::get_type_name(t_type* ttype){ - if (ttype->is_container()) { - if (ttype->is_list()) { - return "list<" + get_type_name(((t_list*)ttype)->get_elem_type()) + ">"; - } - else if (ttype->is_set()) { - return "set<" + get_type_name(((t_set*)ttype)->get_elem_type()) + ">"; - } - else if (ttype->is_map()) { - return "map<" + get_type_name(((t_map*)ttype)->get_key_type()) + - +"," + get_type_name(((t_map*)ttype)->get_val_type()) + ">"; - } - } - else if (ttype->is_base_type()) { - return (((t_base_type*)ttype)->is_binary() ? "binary" : ttype->get_name()); - } - return ttype->get_name(); + if (ttype->is_container()) { + if (ttype->is_list()) { + return "list<" + get_type_name(((t_list*)ttype)->get_elem_type()) + ">"; + } + else if (ttype->is_set()) { + return "set<" + get_type_name(((t_set*)ttype)->get_elem_type()) + ">"; + } + else if (ttype->is_map()) { + return "map<" + get_type_name(((t_map*)ttype)->get_key_type()) + + +"," + get_type_name(((t_map*)ttype)->get_val_type()) + ">"; + } + } + else if (ttype->is_base_type()) { + return (((t_base_type*)ttype)->is_binary() ? "binary" : ttype->get_name()); + } + return ttype->get_name(); } THRIFT_REGISTER_GENERATOR(json, "JSON", "") |