class ElasticAPM::GRPC::ClientInterceptor

@api private

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

rubocop:disable Lint/UnusedMethodArgument, Style/ExplicitBlockArgument
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(
    address: split_peer[0],
    port: split_peer[6],
    service: { type: TYPE, name: SUBTYPE, resource: peer }
  )
  ElasticAPM::Span::Context.new(destination: destination)
end