addTraceContextHeaders(headers, setter, spanContext) {
    if (!headers) {
      return
    }

    const traceParent = this.createTraceparent(spanContext)
    if (setter) {
      setter.set(headers, TRACE_CONTEXT_PARENT_HEADER, traceParent)
    } else {
      headers[TRACE_CONTEXT_PARENT_HEADER] = traceParent
    }

    logger.trace('traceparent added with %s', traceParent)

    const tracestate = this.createTracestate(spanContext)
    if (tracestate) {
      if (setter) {
        setter.set(headers, TRACE_CONTEXT_STATE_HEADER, tracestate)
      } else {
        headers[TRACE_CONTEXT_STATE_HEADER] = tracestate
      }
      logger.trace('tracestate added with %s', tracestate)
    }

    this.transaction.agent.recordSupportability('TraceContext/Create/Success')
  }
Takes a headers object and modifies it in place by adding Trace Context headers

@param {object} headers - Headers for an HTTP request
@param {object} setter - otel bridge setter to assign headers to outgoing payload. Doing this instead of assigning to headers because some libraries have special logic for handling outgoing headers(gcp-pubsub)
@param {object} spanContext if passed in, it'll use this to construct traceparent/tracestate. only used in otel bridge mode.