class ElasticAPM::TraceContext::Tracestate

@api private

def self.parse(header)

def self.parse(header)
  entries =
    split_by_nl_and_comma(header)
    .each_with_object({}) do |entry, hsh|
      k, v = entry.split('=')
      next unless k && v && !k.empty? && !v.empty?
      hsh[k] =
        case k
        when 'es' then EsEntry.new(v)
        else Entry.new(k, v)
        end
    end
  new(entries: entries)
end

def es_entry

def es_entry
  # lazy generate this so we only add it if necessary
  entries['es'] ||= EsEntry.new
end

def initialize(entries: {}, sample_rate: nil)

def initialize(entries: {}, sample_rate: nil)
  @entries = entries
  self.sample_rate = sample_rate if sample_rate
end

def split_by_nl_and_comma(str)

def split_by_nl_and_comma(str)
  # HTTP allows multiple headers with the same name, eg. multiple
  # Set-Cookie headers per response.
  # Rack handles this by joining the headers under the same key,
  # separated by newlines.
  # See https://www.rubydoc.info/github/rack/rack/file/SPEC
  String(str).split(ENTRY_SPLIT_REGEX).flatten
end

def to_header

def to_header
  return "" unless entries.any?
  entries.values.map(&:to_s).join(',')
end