class ElasticAPM::GRPC::ClientInterceptor

@api private

def request_response(request:, call:, method:, metadata:)

rubocop:disable Lint/UnusedMethodArgument
def request_response(request:, call:, method:, metadata:)
  return yield unless (transaction = ElasticAPM.current_transaction)
  if (trace_context = transaction.trace_context)
    trace_context.apply_headers { |k, v| metadata[k.downcase] = v }
  end
  ElasticAPM.with_span(
    method, TYPE,
    subtype: SUBTYPE,
    context: span_context(call)
  ) do
    yield
  end
end

def span_context(call)

def span_context(call)
  peer = call.instance_variable_get(:@wrapped)&.peer
  return unless peer
  split_peer = URI.split(peer)
  destination = ElasticAPM::Span::Context::Destination.new(
    type: TYPE,
    name: SUBTYPE,
    resource: peer,
    address: split_peer[0],
    port: split_peer[6]
  )
  ElasticAPM::Span::Context.new(destination: destination)
end