// 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_
