class GrpcKit::RpcDesc

Attributes

marshal[R]

@return [Class, GrpcKit::Grpc::Stream]

marshal_method[R]

@return [Symbol]

name[R]

@return [String]

service_name[R]

@return [String]

unmarshal[R]

@return [Class, GrpcKit::Grpc::Stream]

unmarshal_method[R]

@return [Symbol]

Public Class Methods

new(name:, marshal:, unmarshal:, marshal_method:, unmarshal_method:, service_name:) click to toggle source

@param name [Symbol] path name @param marshal [Class, GrpcKit::Grpc::Stream] marshaling object @param unmarshal [Class, GrpcKit::Grpc::Stream] unmarshaling object @param marshal_method [Symbol] method name of marshaling which marshal is called this method @param unmarshal_method [Symbol] method name of unmarshaling which unmarshal is called this method @param service_name [String]

# File lib/grpc_kit/rpc_desc.rb, line 32
def initialize(name:, marshal:, unmarshal:, marshal_method:, unmarshal_method:, service_name:)
  @name = name
  @marshal = marshal
  @unmarshal = unmarshal
  @marshal_method = marshal_method
  @unmarshal_method = unmarshal_method
  @service_name = service_name
end

Public Instance Methods

bidi_streamer?() click to toggle source

@return [Boolean]

# File lib/grpc_kit/rpc_desc.rb, line 117
def bidi_streamer?
  @marshal.is_a?(GrpcKit::Grpc::Stream) && @unmarshal.is_a?(GrpcKit::Grpc::Stream)
end
build_client(interceptors: [], max_send_message_size: nil, max_receive_message_size: nil) click to toggle source

@param interceptors [Array<GrpcKit::Grpc::ClientInterceptor>] @param max_receive_message_size [Integer, nil] @param max_send_message_size [Integer, nil] @return [#invoke] Client version of rpc class

# File lib/grpc_kit/rpc_desc.rb, line 75
def build_client(interceptors: [], max_send_message_size: nil, max_receive_message_size: nil)
  inter = interceptors.empty? ? nil : client_interceptor.new(interceptors)

  config = GrpcKit::MethodConfig.build_for_client(
    path: path,
    ruby_style_method_name: ruby_style_name,
    codec: client_codec,
    service_name: @service_name,
    method_name: @name,
    interceptor: inter,
    max_receive_message_size: max_receive_message_size || GrpcKit::MAX_CLIENT_RECEIVE_MESSAGE_SIZE,
    max_send_message_size: max_send_message_size || GrpcKit::MAX_CLIENT_SEND_MESSAGE_SIZE,
  )
  client.new(config)
end
build_server(handler, interceptors: [], max_send_message_size: nil, max_receive_message_size: nil) click to toggle source

@param handler [GrpcKit::Grpc::GenericService] @param interceptors [Array<GrpcKit::Grpc::ServerInterceptor>] @param max_receive_message_size [Integer, nil] @param max_send_message_size [Integer, nil] @return [#invoke] Server version of rpc class

# File lib/grpc_kit/rpc_desc.rb, line 55
def build_server(handler, interceptors: [], max_send_message_size: nil, max_receive_message_size: nil)
  inter = interceptors.empty? ? nil : server_interceptor.new(interceptors)

  config = GrpcKit::MethodConfig.build_for_server(
    path: path,
    ruby_style_method_name: ruby_style_name,
    codec: server_codec,
    service_name: @service_name,
    method_name: @name,
    interceptor: inter,
    max_receive_message_size: max_receive_message_size || GrpcKit::MAX_SERVER_RECEIVE_MESSAGE_SIZE,
    max_send_message_size: max_send_message_size || GrpcKit::MAX_SERVER_SEND_MESSAGE_SIZE,
  )
  server.new(handler, config)
end
client_streamer?() click to toggle source

@return [Boolean]

# File lib/grpc_kit/rpc_desc.rb, line 107
def client_streamer?
  @marshal.is_a?(GrpcKit::Grpc::Stream) && !@unmarshal.is_a?(GrpcKit::Grpc::Stream)
end
path() click to toggle source

@return [String] Full name of path name

# File lib/grpc_kit/rpc_desc.rb, line 97
def path
  @path ||= "/#{@service_name}/#{@name}"
end
request_response?() click to toggle source

@return [Boolean]

# File lib/grpc_kit/rpc_desc.rb, line 102
def request_response?
  !@marshal.is_a?(GrpcKit::Grpc::Stream) && !@unmarshal.is_a?(GrpcKit::Grpc::Stream)
end
ruby_style_name() click to toggle source

@return [Symbol] Snake case name

# File lib/grpc_kit/rpc_desc.rb, line 92
def ruby_style_name
  @ruby_style_name ||= to_underscore(@name).to_sym
end
server_streamer?() click to toggle source

@return [Boolean]

# File lib/grpc_kit/rpc_desc.rb, line 112
def server_streamer?
  !@marshal.is_a?(GrpcKit::Grpc::Stream) && @unmarshal.is_a?(GrpcKit::Grpc::Stream)
end

Private Instance Methods

client() click to toggle source
# File lib/grpc_kit/rpc_desc.rb, line 136
def client
  @client ||=
    if request_response?
      GrpcKit::Rpcs::Client::RequestResponse
    elsif client_streamer?
      GrpcKit::Rpcs::Client::ClientStreamer
    elsif server_streamer?
      GrpcKit::Rpcs::Client::ServerStreamer
    elsif bidi_streamer?
      GrpcKit::Rpcs::Client::BidiStreamer
    end
end
client_codec() click to toggle source
# File lib/grpc_kit/rpc_desc.rb, line 158
def client_codec
  @client_codec ||= Codec.new(
    marshal: @marshal,
    unmarshal: @unmarshal,
    marshal_method: @marshal_method,
    unmarshal_method: @unmarshal_method,
  )
end
client_interceptor() click to toggle source
# File lib/grpc_kit/rpc_desc.rb, line 179
def client_interceptor
  if request_response?
    GrpcKit::Interceptors::Client::RequestResponse
  elsif client_streamer?
    GrpcKit::Interceptors::Client::ClientStreamer
  elsif server_streamer?
    GrpcKit::Interceptors::Client::ServerStreamer
  elsif bidi_streamer?
    GrpcKit::Interceptors::Client::BidiStreamer
  end
end
server() click to toggle source
# File lib/grpc_kit/rpc_desc.rb, line 123
def server
  @server ||=
    if request_response?
      GrpcKit::Rpcs::Server::RequestResponse
    elsif client_streamer?
      GrpcKit::Rpcs::Server::ClientStreamer
    elsif server_streamer?
      GrpcKit::Rpcs::Server::ServerStreamer
    elsif bidi_streamer?
      GrpcKit::Rpcs::Server::BidiStreamer
    end
end
server_codec() click to toggle source
# File lib/grpc_kit/rpc_desc.rb, line 149
def server_codec
  @server_codec ||= Codec.new(
    marshal: @unmarshal,
    unmarshal: @marshal,
    marshal_method: @marshal_method,
    unmarshal_method: @unmarshal_method,
  )
end
server_interceptor() click to toggle source
# File lib/grpc_kit/rpc_desc.rb, line 167
def server_interceptor
  if request_response?
    GrpcKit::Interceptors::Server::RequestResponse
  elsif client_streamer?
    GrpcKit::Interceptors::Server::ClientStreamer
  elsif server_streamer?
    GrpcKit::Interceptors::Server::ServerStreamer
  elsif bidi_streamer?
    GrpcKit::Interceptors::Server::BidiStreamer
  end
end
to_underscore(val) click to toggle source
# File lib/grpc_kit/rpc_desc.rb, line 191
def to_underscore(val)
  val
    .to_s
    .gsub(/([A-Z]+)([A-Z][a-z])/, '\1_\2')
    .gsub(/([a-z\d])([A-Z])/, '\1_\2')
    .tr('-', '_')
    .downcase
end