iceberg-cpp
Loading...
Searching...
No Matches
Classes | Macros
error_collector.h File Reference
#include <string>
#include <vector>
#include "iceberg/iceberg_export.h"
#include "iceberg/result.h"

Go to the source code of this file.

Classes

class  iceberg::ErrorCollector
 Base class for collecting errors in the builder pattern. More...
 

Macros

#define ICEBERG_BUILDER_RETURN_IF_ERROR(result)
 
#define ICEBERG_BUILDER_ASSIGN_OR_RETURN_IMPL(result_name, lhs, rexpr)
 
#define ICEBERG_BUILDER_ASSIGN_OR_RETURN(lhs, rexpr)
 
#define ICEBERG_BUILDER_ASSIGN_OR_RETURN_WITH_ERROR_IMPL(result_name, lhs, rexpr, ...)
 
#define ICEBERG_BUILDER_ASSIGN_OR_RETURN_WITH_ERROR(lhs, rexpr, ...)
 
#define ICEBERG_BUILDER_CHECK(expr, ...)
 

Detailed Description

Base class for collecting validation errors in builder patterns

Macro Definition Documentation

◆ ICEBERG_BUILDER_ASSIGN_OR_RETURN

#define ICEBERG_BUILDER_ASSIGN_OR_RETURN (   lhs,
  rexpr 
)
Value:
ICEBERG_BUILDER_ASSIGN_OR_RETURN_IMPL( \
ICEBERG_ASSIGN_OR_RAISE_NAME(result_, __COUNTER__), lhs, rexpr)

◆ ICEBERG_BUILDER_ASSIGN_OR_RETURN_IMPL

#define ICEBERG_BUILDER_ASSIGN_OR_RETURN_IMPL (   result_name,
  lhs,
  rexpr 
)
Value:
auto&& result_name = (rexpr); \
ICEBERG_BUILDER_RETURN_IF_ERROR(result_name) \
lhs = std::move(result_name.value());

◆ ICEBERG_BUILDER_ASSIGN_OR_RETURN_WITH_ERROR

#define ICEBERG_BUILDER_ASSIGN_OR_RETURN_WITH_ERROR (   lhs,
  rexpr,
  ... 
)
Value:
ICEBERG_BUILDER_ASSIGN_OR_RETURN_WITH_ERROR_IMPL( \
ICEBERG_ASSIGN_OR_RAISE_NAME(result_, __COUNTER__), lhs, rexpr, __VA_ARGS__)

◆ ICEBERG_BUILDER_ASSIGN_OR_RETURN_WITH_ERROR_IMPL

#define ICEBERG_BUILDER_ASSIGN_OR_RETURN_WITH_ERROR_IMPL (   result_name,
  lhs,
  rexpr,
  ... 
)
Value:
auto&& result_name = (rexpr); \
if (!result_name) [[unlikely]] { \
return AddError(ErrorKind::kInvalidArgument, __VA_ARGS__); \
} \
lhs = std::move(result_name.value());

◆ ICEBERG_BUILDER_CHECK

#define ICEBERG_BUILDER_CHECK (   expr,
  ... 
)
Value:
do { \
if (!(expr)) [[unlikely]] { \
return AddError(ErrorKind::kInvalidArgument, __VA_ARGS__); \
} \
} while (false)

◆ ICEBERG_BUILDER_RETURN_IF_ERROR

#define ICEBERG_BUILDER_RETURN_IF_ERROR (   result)
Value:
if (auto&& result_name = result; !result_name) [[unlikely]] { \
errors_.emplace_back(std::move(result_name.error())); \
return *this; \
}