Sha256: d1864f64a80588a5b84047081c4a726cd07ccc2c4becd93ba34168c58fdc0bc6
Contents?: true
Size: 1.5 KB
Versions: 2
Compression:
Stored size: 1.5 KB
Contents
# frozen_string_literal: true module ProtoPharm module Introspection class RpcInspector attr_reader :grpc_service, :endpoint_name delegate :service_name, :rpc_descs, to: :grpc_service def initialize(service, endpoint_name) @grpc_service = ServiceResolver.resolve(service) @endpoint_name = endpoint_name end def normalize_request_proto(proto = nil, **kwargs) cast_proto(input_type, proto, **kwargs) end def normalize_response_proto(proto = nil, **kwargs) cast_proto(output_type, proto, **kwargs) end def normalized_rpc_name @normalized_rpc_name ||= endpoint_name.to_s.camelize.to_sym end 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 def grpc_path @grpc_path ||= "/#{service_name}/#{normalized_rpc_name}" end def input_type rpc_desc.input end def output_type rpc_desc.output end private 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 end end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
proto_pharm-0.7.0 | lib/proto_pharm/introspection/rpc_inspector.rb |
proto_pharm-0.6.0 | lib/proto_pharm/introspection/rpc_inspector.rb |