Skip to content

Commit b05e5f0

Browse files
committedSep 30, 2024
compiler/cpp/src/generate/t_rb_generator: Use the legacy_name to try building the client/prcoessor
1 parent f2955f8 commit b05e5f0

File tree

5 files changed

+87
-2
lines changed

5 files changed

+87
-2
lines changed
 

‎compiler/cpp/src/generate/t_rb_generator.cc

+29-2
Original file line numberDiff line numberDiff line change
@@ -596,6 +596,15 @@ void t_rb_generator::generate_rb_struct(t_rb_ofstream& out,
596596
out.indent() << "NAME = '" << tstruct->get_name() << "'.freeze" << endl;
597597
out.indent() << "NAMESPACE = '" << tstruct->get_program()->get_namespace("*") << "'.freeze" << endl << endl;
598598

599+
out.indent() << "LEGACY_NAMES = [" << endl;
600+
std::vector<t_name*> legacy_names = tstruct->get_legacy_names();
601+
out.indent_up();
602+
for (std::vector<t_name*>::iterator it = legacy_names.begin(); it != legacy_names.end(); ++it) {
603+
out.indent() << "{ namespace: '" << (*it)->get_namespace() << "', name: '" << (*it)->get_name() << "' }," << endl;
604+
}
605+
out.indent_down();
606+
out.indent() << "].freeze" << endl << endl;
607+
599608
generate_field_constants(out, tstruct);
600609
generate_field_defns(out, tstruct);
601610
generate_rb_struct_required_validator(out, tstruct);
@@ -623,6 +632,15 @@ void t_rb_generator::generate_rb_union(t_rb_ofstream& out,
623632
out.indent() << "NAME = '" << tstruct->get_name() << "'.freeze" << endl;
624633
out.indent() << "NAMESPACE = '" << tstruct->get_program()->get_namespace("*") << "'.freeze" << endl << endl;
625634

635+
out.indent() << "LEGACY_NAMES = [" << endl;
636+
std::vector<t_name*> legacy_names = tstruct->get_legacy_names();
637+
out.indent_up();
638+
for (std::vector<t_name*>::iterator it = legacy_names.begin(); it != legacy_names.end(); ++it) {
639+
out.indent() << "{ namespace: '" << (*it)->get_namespace() << "', name: '" << (*it)->get_name() << "' }," << endl;
640+
}
641+
out.indent_down();
642+
out.indent() << "].freeze" << endl << endl;
643+
626644
generate_field_constructors(out, tstruct);
627645

628646
generate_field_constants(out, tstruct);
@@ -825,6 +843,15 @@ void t_rb_generator::generate_service(t_service* tservice) {
825843
f_service_.indent() << "SERVICE = '" << tservice->get_name() << "'.freeze" << endl;
826844
f_service_.indent() << "NAMESPACE = '" << tservice->get_program()->get_namespace("*") << "'.freeze" << endl << endl;
827845

846+
f_service_.indent() << "LEGACY_NAMES = [" << endl;
847+
std::vector<t_name*> legacy_names = tservice->get_legacy_names();
848+
f_service_.indent_up();
849+
for (std::vector<t_name*>::iterator it = legacy_names.begin(); it != legacy_names.end(); ++it) {
850+
f_service_.indent() << "{ namespace: '" << (*it)->get_namespace() << "', service: '" << (*it)->get_name() << "' }," << endl;
851+
}
852+
f_service_.indent_down();
853+
f_service_.indent() << "].freeze" << endl << endl;
854+
828855
// Generate the three main parts of the service (well, two for now in PHP)
829856
generate_service_helpers(tservice);
830857
generate_service_client(tservice);
@@ -904,7 +931,7 @@ void t_rb_generator::generate_service_client(t_service* tservice) {
904931

905932
f_service_.indent() << "def self.from_provider(provider)" << endl;
906933
f_service_.indent_up();
907-
f_service_.indent() << "Client.new(provider.build(NAMESPACE, SERVICE))" << endl;
934+
f_service_.indent() << "Client.new(::Thrift.build_client_from_provider(" << full_type_name(tservice) << ", provider))" << endl;
908935
f_service_.indent_down();
909936
f_service_.indent() << "end" << endl << endl;
910937

@@ -1015,7 +1042,7 @@ void t_rb_generator::generate_service_server(t_service* tservice) {
10151042

10161043
f_service_.indent() << "def self.from_provider(handler, provider)" << endl;
10171044
f_service_.indent_up();
1018-
f_service_.indent() << "provider.build(NAMESPACE, SERVICE, Processor, handler)" << endl;
1045+
f_service_.indent() << "::Thrift.build_processor_from_provider(" << full_type_name(tservice) << ", provider, handler)" << endl;
10191046
f_service_.indent_down();
10201047
f_service_.indent() << "end" << endl << endl;
10211048

‎lib/rb/lib/thrift/client.rb

+15
Original file line numberDiff line numberDiff line change
@@ -115,5 +115,20 @@ def build_client(input)
115115

116116
input
117117
end
118+
119+
def build_client_from_provider(klass, provider)
120+
sdef = ServiceDefinition.new(klass)
121+
122+
[
123+
{ namespace: sdef.namespace, service: sdef.service },
124+
*sdef.legacy_names
125+
].reduce(nil) do |acc, n|
126+
acc || begin
127+
provider.build(n[:namespace], n[:service])
128+
rescue ClientNotDefined
129+
nil
130+
end
131+
end || raise(ClientNotDefined)
132+
end
118133
end
119134
end

‎lib/rb/lib/thrift/definition.rb

+12
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,12 @@ def name
1717
def struct_type
1818
"#{namespace}.#{name}"
1919
end
20+
21+
def legacy_names
22+
return [] unless @klass.const_defined? :LEGACY_NAMES
23+
24+
@klass::LEGACY_NAMES
25+
end
2026
end
2127

2228
class ServiceDefinition < StructDefinition
@@ -42,6 +48,12 @@ def service
4248
@klass::SERVICE
4349
end
4450

51+
def legacy_names
52+
return [] unless @klass.const_defined? :LEGACY_NAMES
53+
54+
@klass::LEGACY_NAMES
55+
end
56+
4557
def service_type
4658
"#{namespace}.#{service}"
4759
end

‎lib/rb/lib/thrift/exceptions.rb

+12
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,18 @@ def initialize(message)
2727
attr_reader :message
2828
end
2929

30+
class ClientNotDefined < Exception
31+
def initialize
32+
super('client not defined')
33+
end
34+
end
35+
36+
class ProcessorNotDefined < Exception
37+
def initialize
38+
super('client not defined')
39+
end
40+
end
41+
3042
class ApplicationException < Exception
3143

3244
UNKNOWN = 0

‎lib/rb/lib/thrift/processor.rb

+19
Original file line numberDiff line numberDiff line change
@@ -174,4 +174,23 @@ def write_result(result, oprot, name, seqid)
174174
oprot.trans.flush
175175
end
176176
end
177+
178+
class << self
179+
def build_processor_from_provider(klass, provider, handler)
180+
sdef = ServiceDefinition.new(klass)
181+
182+
[
183+
{ namespace: sdef.namespace, service: sdef.service },
184+
*sdef.legacy_names
185+
].reduce(nil) do |acc, n|
186+
acc || begin
187+
provider.build(
188+
n[:namespace], n[:service], sdef.processor_class, handler
189+
)
190+
rescue ProcessorNotDefined
191+
nil
192+
end
193+
end || raise(ProcessorNotDefined)
194+
end
195+
end
177196
end

0 commit comments

Comments
 (0)
Failed to load comments.