class ElasticAPM::Serializers::Errors

@api private

def build(error)

rubocop:disable Metrics/AbcSize, Metrics/MethodLength
def build(error)
  base = {
    id: error.id,
    culprit: error.culprit,
    timestamp: micros_to_time(error.timestamp).utc.iso8601(3),
    context: error.context.to_h
  }
  if (exception = error.exception)
    base[:exception] = build_exception exception
  end
  if (log = error.log)
    base[:log] = build_log log
  end
  if (transaction_id = error.transaction_id)
    base[:transaction] = { id: transaction_id }
  end
  base
end

def build_all(errors)

def build_all(errors)
  { errors: Array(errors).map { |e| build(e) } }
end

def build_exception(exception)

def build_exception(exception)
  {
    message: exception.message,
    type: exception.type,
    module: exception.module,
    code: exception.code,
    attributes: exception.attributes,
    stacktrace: exception.stacktrace.to_a,
    handled: exception.handled
  }
end

def build_log(log)

def build_log(log)
  {
    message: log.message,
    level: log.level,
    logger_name: log.logger_name,
    param_message: log.param_message,
    stacktrace: log.stacktrace.to_a
  }
end