// Copyright 2020 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 DIAGNOSTICS_COMMON_STATUS_MACROS_H_
#define DIAGNOSTICS_COMMON_STATUS_MACROS_H_

#include <utility>

#include "diagnostics/common/statusor.h"

#define RETURN_IF_ERROR(rexpr) \
  do {                         \
    auto status = (rexpr);     \
    if (!status.ok())          \
      return status;           \
  } while (0)

// Generates multi-line expression.
#define ASSIGN_OR_RETURN(lhs, rexpr)    \
  STATUS_MACROS_IMPL_ASSIGN_OR_RETURN_( \
      STATUS_MACROS_IMPL_CONCAT_(_status_or_value, __LINE__), lhs, rexpr)

// Implementation details.
#define STATUS_MACROS_IMPL_ASSIGN_OR_RETURN_(statusor, lhs, rexpr) \
  auto statusor = (rexpr);                                         \
  if (!statusor.ok()) {                                            \
    return (statusor.status());                                    \
  }                                                                \
  lhs = std::move(statusor).value()

// Internal helper for concatenating macro values.
#define STATUS_MACROS_IMPL_CONCAT_INNER_(x, y) x##y
#define STATUS_MACROS_IMPL_CONCAT_(x, y) STATUS_MACROS_IMPL_CONCAT_INNER_(x, y)

#endif  // DIAGNOSTICS_COMMON_STATUS_MACROS_H_
