1 #ifndef T_ERL_GENERATOR_H
2 #define T_ERL_GENERATOR_H
9 #include "t_oop_generator.h"
12 * Erlang code generator.
16 class t_erl_generator
: public t_oop_generator
{
18 t_erl_generator(t_program
* program
) :
19 t_oop_generator(program
)
21 program_name_
[0] = tolower(program_name_
[0]);
22 service_name_
[0] = tolower(service_name_
[0]);
23 out_dir_base_
= "gen-erl";
27 * Init and close methods
30 void init_generator();
31 void close_generator();
34 * Program-level generation functions
37 void generate_typedef (t_typedef
* ttypedef
);
38 void generate_enum (t_enum
* tenum
);
39 void generate_const (t_const
* tconst
);
40 void generate_struct (t_struct
* tstruct
);
41 void generate_xception (t_struct
* txception
);
42 void generate_service (t_service
* tservice
);
44 std::string
render_const_value(t_type
* type
, t_const_value
* value
);
47 * Struct generation code
50 void generate_erl_struct(t_struct
* tstruct
, bool is_exception
);
51 void generate_erl_struct_definition(std::ostream
& out
, std::ostream
& hrl_out
, t_struct
* tstruct
, bool is_xception
=false, bool is_result
=false);
52 void generate_erl_struct_reader(std::ostream
& out
, t_struct
* tstruct
);
53 void generate_erl_struct_writer(std::ostream
& out
, t_struct
* tstruct
);
54 void generate_erl_function_helpers(t_function
* tfunction
);
57 * Service-level generation functions
60 void generate_service_helpers (t_service
* tservice
);
61 void generate_service_interface (t_service
* tservice
);
62 void generate_service_client (t_service
* tservice
);
63 void generate_service_server (t_service
* tservice
);
64 void generate_process_function (t_service
* tservice
, t_function
* tfunction
);
67 * Serialization constructs
70 void generate_deserialize_field (std::ostream
&out
,
72 std::string prefix
="",
75 void generate_deserialize_struct (std::ostream
&out
,
77 std::string prefix
="");
79 void generate_deserialize_container (std::ostream
&out
,
81 std::string prefix
="");
83 void generate_deserialize_set_element (std::ostream
&out
,
85 std::string prefix
="");
87 void generate_deserialize_map_element (std::ostream
&out
,
89 std::string prefix
="");
91 void generate_deserialize_list_element (std::ostream
&out
,
93 std::string prefix
="");
95 void generate_serialize_field (std::ostream
&out
,
97 std::string prefix
="");
99 void generate_serialize_struct (std::ostream
&out
,
101 std::string prefix
="");
103 void generate_serialize_container (std::ostream
&out
,
105 std::string prefix
="");
107 void generate_serialize_map_element (std::ostream
&out
,
112 void generate_serialize_set_element (std::ostream
&out
,
116 void generate_serialize_list_element (std::ostream
&out
,
121 * Helper rendering functions
124 std::string
erl_autogen_comment();
125 std::string
erl_imports();
126 std::string
render_includes();
127 std::string
declare_field(t_field
* tfield
);
128 std::string
type_name(t_type
* ttype
);
129 std::string
function_signature(t_function
* tfunction
, std::string prefix
="");
131 std::string
argument_list(t_struct
* tstruct
);
132 std::string
type_to_enum(t_type
* ttype
);
134 std::string
capitalize(std::string in
) {
135 in
[0] = toupper(in
[0]);
139 std::string
uncapitalize(std::string in
) {
140 in
[0] = tolower(in
[0]);
144 std::string
atomize(std::string in
) {
145 if (isupper(in
[0])) {
146 return "'" + in
+ "'";
155 * add function to export list
158 void export_function(t_function
* tfunction
, std::string prefix
="");
159 void export_string(std::string name
, int num
);
161 void export_types_function(t_function
* tfunction
, std::string prefix
="");
162 void export_types_string(std::string name
, int num
);
165 * write out headers and footers for hrl files
168 void hrl_header(std::ostream
& out
, std::string name
);
169 void hrl_footer(std::ostream
& out
, std::string name
);
172 * stuff to spit out at the top of generated files
175 bool export_lines_first_
;
176 std::ostringstream export_lines_
;
178 bool export_types_lines_first_
;
179 std::ostringstream export_types_lines_
;
185 std::ostringstream f_types_
;
186 std::ofstream f_types_file_
;
187 std::ofstream f_types_hrl_file_
;
189 std::ofstream f_consts_
;
190 std::ostringstream f_service_
;
191 std::ofstream f_service_file_
;
192 std::ofstream f_service_hrl_
;