class ElasticAPM::Transport::Serializers::ContextSerializer

@api private

def build(context)

def build(context)
  return nil if context.nil? || context.empty?
  {
    custom: context.custom,
    tags: mixed_object(context.labels),
    request: build_request(context.request),
    response: build_response(context.response),
    user: build_user(context.user),
    service: build_service(context.service)
  }
end

def build_request(request)

def build_request(request)
  return unless request
  {
    body: request.body,
    cookies: request.cookies,
    env: request.env,
    headers: request.headers,
    http_version: keyword_field(request.http_version),
    method: keyword_field(request.method),
    socket: build_socket(request.socket),
    url: build_url(request.url)
  }
end

def build_response(response)

def build_response(response)
  return unless response
  {
    status_code: response.status_code.to_i,
    headers: response.headers,
    headers_sent: response.headers_sent,
    finished: response.finished
  }
end

def build_service(service)

def build_service(service)
  return unless service
  {
    framework: {
      name: keyword_field(service.framework.name),
      version: keyword_field(service.framework.version)
    }
  }
end

def build_socket(socket)

def build_socket(socket)
  return unless socket
  {
    remote_addr: socket.remote_addr
  }
end

def build_url(url)

def build_url(url)
  return unless url
  {
    protocol: keyword_field(url.protocol),
    full: keyword_field(url.full),
    hostname: keyword_field(url.hostname),
    port: keyword_field(url.port),
    pathname: keyword_field(url.pathname),
    search: keyword_field(url.search),
    hash: keyword_field(url.hash)
  }
end

def build_user(user)

def build_user(user)
  return if !user || user.empty?
  {
    id: keyword_field(user.id),
    email: keyword_field(user.email),
    username: keyword_field(user.username)
  }
end