#ifndef PRODUCTION_SUSHID_SAFEPOWER_AGENT_BMC_STATUS_MACROS_H_
#define PRODUCTION_SUSHID_SAFEPOWER_AGENT_BMC_STATUS_MACROS_H_

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

#define ASSIGN_OR_RETURN_CT(lhs, expr, ct) \
  decltype(expr) status_or_##ct; \
  do { \
    status_or_##ct = (expr); \
    if (!status_or_##ct.ok()) { \
      return status_or_##ct.status(); \
    } \
  } while (0); \
  lhs = std::move(status_or_##ct).value()

#define ASSIGN_OR_RETURN_CT_pre(lhs, exp, ct) \
  ASSIGN_OR_RETURN_CT(lhs, exp, ct)

#define ASSIGN_OR_RETURN(lhs, expr ) \
  ASSIGN_OR_RETURN_CT_pre(lhs, expr, __COUNTER__ )


#endif  // PRODUCTION_SUSHID_SAFEPOWER_AGENT_BMC_STATUS_MACROS_H_
