Skip to content

Commit

Permalink
compiler/cpp/src/generate/t_rb_generator: Use the legacy_name to try …
Browse files Browse the repository at this point in the history
…building the client/prcoessor
  • Loading branch information
AlexisMontagne committed Sep 30, 2024
1 parent f2955f8 commit b05e5f0
Show file tree
Hide file tree
Showing 5 changed files with 87 additions and 2 deletions.
31 changes: 29 additions & 2 deletions compiler/cpp/src/generate/t_rb_generator.cc
Original file line number Diff line number Diff line change
Expand Up @@ -596,6 +596,15 @@ void t_rb_generator::generate_rb_struct(t_rb_ofstream& out,
out.indent() << "NAME = '" << tstruct->get_name() << "'.freeze" << endl;
out.indent() << "NAMESPACE = '" << tstruct->get_program()->get_namespace("*") << "'.freeze" << endl << endl;

out.indent() << "LEGACY_NAMES = [" << endl;
std::vector<t_name*> legacy_names = tstruct->get_legacy_names();
out.indent_up();
for (std::vector<t_name*>::iterator it = legacy_names.begin(); it != legacy_names.end(); ++it) {
out.indent() << "{ namespace: '" << (*it)->get_namespace() << "', name: '" << (*it)->get_name() << "' }," << endl;
}
out.indent_down();
out.indent() << "].freeze" << endl << endl;

generate_field_constants(out, tstruct);
generate_field_defns(out, tstruct);
generate_rb_struct_required_validator(out, tstruct);
Expand Down Expand Up @@ -623,6 +632,15 @@ void t_rb_generator::generate_rb_union(t_rb_ofstream& out,
out.indent() << "NAME = '" << tstruct->get_name() << "'.freeze" << endl;
out.indent() << "NAMESPACE = '" << tstruct->get_program()->get_namespace("*") << "'.freeze" << endl << endl;

out.indent() << "LEGACY_NAMES = [" << endl;
std::vector<t_name*> legacy_names = tstruct->get_legacy_names();
out.indent_up();
for (std::vector<t_name*>::iterator it = legacy_names.begin(); it != legacy_names.end(); ++it) {
out.indent() << "{ namespace: '" << (*it)->get_namespace() << "', name: '" << (*it)->get_name() << "' }," << endl;
}
out.indent_down();
out.indent() << "].freeze" << endl << endl;

generate_field_constructors(out, tstruct);

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

f_service_.indent() << "LEGACY_NAMES = [" << endl;
std::vector<t_name*> legacy_names = tservice->get_legacy_names();
f_service_.indent_up();
for (std::vector<t_name*>::iterator it = legacy_names.begin(); it != legacy_names.end(); ++it) {
f_service_.indent() << "{ namespace: '" << (*it)->get_namespace() << "', service: '" << (*it)->get_name() << "' }," << endl;
}
f_service_.indent_down();
f_service_.indent() << "].freeze" << endl << endl;

// Generate the three main parts of the service (well, two for now in PHP)
generate_service_helpers(tservice);
generate_service_client(tservice);
Expand Down Expand Up @@ -904,7 +931,7 @@ void t_rb_generator::generate_service_client(t_service* tservice) {

f_service_.indent() << "def self.from_provider(provider)" << endl;
f_service_.indent_up();
f_service_.indent() << "Client.new(provider.build(NAMESPACE, SERVICE))" << endl;
f_service_.indent() << "Client.new(::Thrift.build_client_from_provider(" << full_type_name(tservice) << ", provider))" << endl;
f_service_.indent_down();
f_service_.indent() << "end" << endl << endl;

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

f_service_.indent() << "def self.from_provider(handler, provider)" << endl;
f_service_.indent_up();
f_service_.indent() << "provider.build(NAMESPACE, SERVICE, Processor, handler)" << endl;
f_service_.indent() << "::Thrift.build_processor_from_provider(" << full_type_name(tservice) << ", provider, handler)" << endl;
f_service_.indent_down();
f_service_.indent() << "end" << endl << endl;

Expand Down
15 changes: 15 additions & 0 deletions lib/rb/lib/thrift/client.rb
Original file line number Diff line number Diff line change
Expand Up @@ -115,5 +115,20 @@ def build_client(input)

input
end

def build_client_from_provider(klass, provider)
sdef = ServiceDefinition.new(klass)

[
{ namespace: sdef.namespace, service: sdef.service },
*sdef.legacy_names
].reduce(nil) do |acc, n|
acc || begin
provider.build(n[:namespace], n[:service])
rescue ClientNotDefined
nil
end
end || raise(ClientNotDefined)
end
end
end
12 changes: 12 additions & 0 deletions lib/rb/lib/thrift/definition.rb
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,12 @@ def name
def struct_type
"#{namespace}.#{name}"
end

def legacy_names
return [] unless @klass.const_defined? :LEGACY_NAMES

@klass::LEGACY_NAMES
end
end

class ServiceDefinition < StructDefinition
Expand All @@ -42,6 +48,12 @@ def service
@klass::SERVICE
end

def legacy_names
return [] unless @klass.const_defined? :LEGACY_NAMES

@klass::LEGACY_NAMES
end

def service_type
"#{namespace}.#{service}"
end
Expand Down
12 changes: 12 additions & 0 deletions lib/rb/lib/thrift/exceptions.rb
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,18 @@ def initialize(message)
attr_reader :message
end

class ClientNotDefined < Exception
def initialize
super('client not defined')
end
end

class ProcessorNotDefined < Exception
def initialize
super('client not defined')
end
end

class ApplicationException < Exception

UNKNOWN = 0
Expand Down
19 changes: 19 additions & 0 deletions lib/rb/lib/thrift/processor.rb
Original file line number Diff line number Diff line change
Expand Up @@ -174,4 +174,23 @@ def write_result(result, oprot, name, seqid)
oprot.trans.flush
end
end

class << self
def build_processor_from_provider(klass, provider, handler)
sdef = ServiceDefinition.new(klass)

[
{ namespace: sdef.namespace, service: sdef.service },
*sdef.legacy_names
].reduce(nil) do |acc, n|
acc || begin
provider.build(
n[:namespace], n[:service], sdef.processor_class, handler
)
rescue ProcessorNotDefined
nil
end
end || raise(ProcessorNotDefined)
end
end
end

0 comments on commit b05e5f0

Please sign in to comment.