class ProtoPharm::Introspection::RpcInspector

Attributes

endpoint_name[R]
grpc_service[R]

Public Class Methods

new(service, endpoint_name) click to toggle source
# File lib/proto_pharm/introspection/rpc_inspector.rb, line 10
def initialize(service, endpoint_name)
  @grpc_service = ServiceResolver.resolve(service)

  @endpoint_name = endpoint_name
end

Public Instance Methods

grpc_path() click to toggle source
# File lib/proto_pharm/introspection/rpc_inspector.rb, line 34
def grpc_path
  @grpc_path ||= "/#{service_name}/#{normalized_rpc_name}"
end
input_type() click to toggle source
# File lib/proto_pharm/introspection/rpc_inspector.rb, line 38
def input_type
  rpc_desc.input
end
normalize_request_proto(proto = nil, **kwargs) click to toggle source
# File lib/proto_pharm/introspection/rpc_inspector.rb, line 16
def normalize_request_proto(proto = nil, **kwargs)
  cast_proto(input_type, proto, **kwargs)
end
normalize_response_proto(proto = nil, **kwargs) click to toggle source
# File lib/proto_pharm/introspection/rpc_inspector.rb, line 20
def normalize_response_proto(proto = nil, **kwargs)
  cast_proto(output_type, proto, **kwargs)
end
normalized_rpc_name() click to toggle source
# File lib/proto_pharm/introspection/rpc_inspector.rb, line 24
def normalized_rpc_name
  @normalized_rpc_name ||= endpoint_name.to_s.camelize.to_sym
end
output_type() click to toggle source
# File lib/proto_pharm/introspection/rpc_inspector.rb, line 42
def output_type
  rpc_desc.output
end
rpc_desc() click to toggle source
# File lib/proto_pharm/introspection/rpc_inspector.rb, line 28
def rpc_desc
  @rpc_desc ||= rpc_descs[normalized_rpc_name].tap do |endpoint|
    raise RpcNotFoundError, "Service #{service_name} does not implement '#{normalized_rpc_name}'" if endpoint.blank?
  end
end

Private Instance Methods

cast_proto(proto_class, proto = nil, **kwargs) click to toggle source
# File lib/proto_pharm/introspection/rpc_inspector.rb, line 48
def cast_proto(proto_class, proto = nil, **kwargs)
  return proto_class.new(**kwargs) if proto.blank?
  return proto_class.new(proto) if proto.respond_to?(:to_hash)

  raise InvalidProtoType, "Invalid proto type #{proto.class} for #{grpc_path}, expected #{proto_class}" unless proto.class == proto_class

  proto
end