1
0
mirror of https://github.com/bumi/lnrpc synced 2025-06-16 21:25:35 +00:00
lnrpc/lib/lnrpc/grpc_wrapper.rb
Michael Bumann 404ed3b99e Add support for v0.11 GRPC services
This also refactors the client GRPC wrapper to dynamically load the
request objects.
All GRPC generated client files now live under lib/grpc_services
2020-08-28 14:14:50 +02:00

44 lines
946 B
Ruby

module Lnrpc
class GrpcWrapper
attr_reader :grpc, :service
def initialize(service:, grpc:)
@grpc = grpc
@service = service
end
def method_missing(m, *args, &block)
if grpc.respond_to?(m)
params = args[0]
args[0] = params.nil? ? request_class_for(m).new : request_class_for(m).new(params)
grpc.send(m, *args, &block)
else
super
end
end
def inspect
"#{self} @grpc=\"#{grpc}\""
end
private
def request_class_for(method_name)
rpc_desc = service.rpc_descs[camelize(method_name).to_sym]
raise "Request class not found for: #{method_name}" unless rpc_desc
rpc_desc.input
end
def camelize(name)
str = name.to_s
separators = ['_', '\s']
separators.each do |s|
str = str.gsub(/(?:#{s}+)([a-z])/) { $1.upcase }
end
str.gsub(/(\A|\s)([a-z])/) { $1 + $2.upcase }
end
end
end