@@ -184,6 +184,8 @@ class t_rb_generator : public t_oop_generator {
184
184
185
185
void generate_rdoc (t_rb_ofstream& out, t_doc* tdoc);
186
186
187
+ void generate_rb_annotations (t_rb_ofstream& out, t_annotated* tannotated, std::string key_prefix);
188
+
187
189
/* *
188
190
* Helper rendering functions
189
191
*/
@@ -596,6 +598,7 @@ void t_rb_generator::generate_rb_struct(t_rb_ofstream& out,
596
598
out.indent () << " NAME = '" << tstruct->get_name () << " '.freeze" << endl;
597
599
out.indent () << " NAMESPACE = '" << tstruct->get_program ()->get_namespace (" *" ) << " '.freeze" << endl << endl;
598
600
601
+ generate_rb_annotations (out, tstruct, " " );
599
602
generate_field_constants (out, tstruct);
600
603
generate_field_defns (out, tstruct);
601
604
generate_rb_struct_required_validator (out, tstruct);
@@ -607,6 +610,28 @@ void t_rb_generator::generate_rb_struct(t_rb_ofstream& out,
607
610
out.indent () << " end" << endl << endl;
608
611
}
609
612
613
+
614
+ void t_rb_generator::generate_rb_annotations (t_rb_ofstream& out,
615
+ t_annotated* tannotated,
616
+ std::string key_prefix) {
617
+ out.indent () << key_prefix << " LEGACY_ANNOTATIONS = {" << endl;
618
+ out.indent_up ();
619
+ const map<string, string>& annotations = tannotated->legacy_annotations ();
620
+ for (map<string, string>::const_iterator ns_it = annotations.begin (); ns_it != annotations.end (); ++ns_it) {
621
+ out << indent () << " %q\" " << escape_string (ns_it->first ) << " \" => %q\" " << escape_string (ns_it->second )<< " \" ," << endl;
622
+ }
623
+ out.indent_down ();
624
+ out.indent () << " }.freeze" << endl << endl;
625
+
626
+ out.indent () << key_prefix << " STRUCTURED_ANNOTATIONS = [" << endl;
627
+ out.indent_up ();
628
+ vector<t_structured_annotation*> sannotations = tannotated->structured_annotations ();
629
+ for (vector<t_structured_annotation*>::const_iterator it = sannotations.begin (); it != sannotations.end (); it++) {
630
+ render_const_value (out.indent (), (*it)->type_ , (*it)->value_ ) << " ," << endl;
631
+ }
632
+ out.indent_down ();
633
+ out.indent () << " ].freeze" << endl << endl;
634
+ }
610
635
/* *
611
636
* Generates a ruby union
612
637
*/
@@ -623,8 +648,8 @@ void t_rb_generator::generate_rb_union(t_rb_ofstream& out,
623
648
out.indent () << " NAME = '" << tstruct->get_name () << " '.freeze" << endl;
624
649
out.indent () << " NAMESPACE = '" << tstruct->get_program ()->get_namespace (" *" ) << " '.freeze" << endl << endl;
625
650
651
+ generate_rb_annotations (out, tstruct, " " );
626
652
generate_field_constructors (out, tstruct);
627
-
628
653
generate_field_constants (out, tstruct);
629
654
generate_field_defns (out, tstruct);
630
655
generate_rb_union_validator (out, tstruct);
@@ -702,6 +727,10 @@ void t_rb_generator::generate_field_defns(t_rb_ofstream& out, t_struct* tstruct)
702
727
const vector<t_field*>& fields = tstruct->get_members ();
703
728
vector<t_field*>::const_iterator f_iter;
704
729
730
+ for (f_iter = fields.begin (); f_iter != fields.end (); ++f_iter) {
731
+ generate_rb_annotations (out, *f_iter, " THRIFT_FIELD_" + upcase_string ((*f_iter)->get_name ()) + " _" );
732
+ }
733
+
705
734
out.indent () << " FIELDS = {" << endl;
706
735
out.indent_up ();
707
736
for (f_iter = fields.begin (); f_iter != fields.end (); ++f_iter) {
@@ -775,6 +804,9 @@ void t_rb_generator::generate_field_data(t_rb_ofstream& out,
775
804
out << " , enum_class: " << full_type_name (field_type);
776
805
}
777
806
807
+ out << " , legacy_annotations: THRIFT_FIELD_" << upcase_string (field_name) << " _LEGACY_ANNOTATIONS" ;
808
+ out << " , structured_annotations: THRIFT_FIELD_" << upcase_string (field_name) << " _STRUCTURED_ANNOTATIONS" ;
809
+
778
810
// End of this field's defn
779
811
out << " }" ;
780
812
}
@@ -826,6 +858,7 @@ void t_rb_generator::generate_service(t_service* tservice) {
826
858
f_service_.indent () << " NAMESPACE = '" << tservice->get_program ()->get_namespace (" *" ) << " '.freeze" << endl << endl;
827
859
828
860
// Generate the three main parts of the service (well, two for now in PHP)
861
+ generate_rb_annotations (f_service_, tservice, " " );
829
862
generate_service_helpers (tservice);
830
863
generate_service_client (tservice);
831
864
generate_service_server (tservice);
@@ -1019,11 +1052,15 @@ void t_rb_generator::generate_service_server(t_service* tservice) {
1019
1052
f_service_.indent_down ();
1020
1053
f_service_.indent () << " end" << endl << endl;
1021
1054
1055
+ for (f_iter = functions.begin (); f_iter != functions.end (); ++f_iter) {
1056
+ generate_rb_annotations (f_service_, *f_iter, " THRIFT_METHOD_" + upcase_string ((*f_iter)->get_name ()) + " _" );
1057
+ }
1058
+
1022
1059
f_service_.indent () << " METHODS = {" << endl;
1023
1060
f_service_.indent_up ();
1024
1061
1025
1062
for (f_iter = functions.begin (); f_iter != functions.end (); ++f_iter) {
1026
- f_service_.indent () << " '" << (*f_iter)->get_name () << " ' => { args_klass: " << capitalize ((*f_iter)->get_name ()) << " _args, oneway: " << ((*f_iter)->is_oneway () ? " true" : " false" ) << " }," << endl;
1063
+ f_service_.indent () << " '" << (*f_iter)->get_name () << " ' => { args_klass: " << capitalize ((*f_iter)->get_name ()) << " _args, oneway: " << ((*f_iter)->is_oneway () ? " true" : " false" ) << " , legacy_annotations: THRIFT_METHOD_ " << upcase_string ((*f_iter)-> get_name ()) << " _STRUCTURED_ANNOTATIONS, structured_annotations: THRIFT_METHOD_ " << upcase_string ((*f_iter)-> get_name ()) << " _STRUCTURED_ANNOTATIONS }," << endl;
1027
1064
}
1028
1065
1029
1066
f_service_.indent_down ();
0 commit comments