// Copyright 2016 The Chromium OS Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef CRASH_REPORTER_CORE_COLLECTOR_LOGGING_H_
#define CRASH_REPORTER_CORE_COLLECTOR_LOGGING_H_

#include <errno.h>

#include <cstring>  // For strerror.
#include <iostream>
#include <string>

#define LOG_ERROR ErrorMessage()
#define PLOG_ERROR ErrorMessage(strerror(errno))

extern const char* g_exec_name;

class ErrorMessage {
 public:
  ErrorMessage() : ErrorMessage(std::string()) {}

  explicit ErrorMessage(const std::string& os_error) : os_error_(os_error) {
    std::cerr << g_exec_name << ": ";
  }

  ~ErrorMessage() {
    if (!os_error_.empty())
      std::cerr << ": " << os_error_;

    std::cerr << ".\n";
  }

 private:
  const std::string os_error_;
};

template <typename Type>
inline const ErrorMessage& operator<<(const ErrorMessage& message,
                                      const Type& value) {
  std::cerr << value;
  return message;
}

#endif  // CRASH_REPORTER_CORE_COLLECTOR_LOGGING_H_
