def call(request_method, params = {}, metadata = {}, opts = {}, &block)
      request_method = request_method.to_sym
      req = streaming_request?(request_method) ? params : request_object(request_method, params)
      md = build_metadata(metadata)
      call_sig = call_signature(request_method)

      unless call_sig
        raise NotImplementedError, "The method #{request_method} has not been implemented in this service."
      end

      resp, operation = execute(call_sig, req, md, opts, &block)

      raise @error_factory.from_exception(resp.result) unless resp.success?

      Gruf::Response.new(operation: operation, message: resp.result, execution_time: resp.time)
    end
def call(request_method, params = {}, metadata = {}, opts = {}, &block)
      request_method = request_method.to_sym
      req = streaming_request?(request_method) ? params : request_object(request_method, params)
      md = build_metadata(metadata)
      call_sig = call_signature(request_method)

      unless call_sig
        raise NotImplementedError, "The method #{request_method} has not been implemented in this service."
      end

      resp, operation = execute(call_sig, req, md, opts, &block)

      raise @error_factory.from_exception(resp.result) unless resp.success?

      Gruf::Response.new(operation: operation, message: resp.result, execution_time: resp.time)
    end
Initialize the client and setup the stub

 @param [Module] service The namespace of the client Stub that is desired to load
 @param [Hash] options A hash of options for the client
 @option options [String] :password The password for basic authentication for the service.
 @option options [String] :hostname The hostname of the service. Defaults to linkerd.
 @param [Hash] client_options A hash of options to pass to the gRPC client stub


 Call the client's method with given params

 @param [String|Symbol] request_method The method that is being requested on the service
 @param [Hash] params (Optional) A hash of parameters that will be inserted into the gRPC request message that is
 required for the given above call
 @param [Hash] metadata (Optional) A hash of metadata key/values that are transported with the client request
 @param [Hash] opts (Optional) A hash of options to send to the gRPC request_response method
 @return [Gruf::Response] The response from the server
 @raise [Gruf::Client::Error|GRPC::BadStatus] If an error occurs, an exception will be raised according to the
 error type that was returned