22#include <arrow/result.h>
23#include <arrow/status.h>
25#include "iceberg/result.h"
27namespace iceberg::arrow {
29inline ErrorKind ToErrorKind(const ::arrow::Status& status) {
30 switch (status.code()) {
31 case ::arrow::StatusCode::IOError:
32 return ErrorKind::kIOError;
33 case ::arrow::StatusCode::NotImplemented:
34 return ErrorKind::kNotImplemented;
36 return ErrorKind::kUnknownError;
40#define ICEBERG_ARROW_ASSIGN_OR_RETURN_IMPL(result_name, lhs, rexpr, error_transform) \
41 auto&& result_name = (rexpr); \
42 if (!result_name.ok()) { \
43 return std::unexpected<Error>{{.kind = error_transform(result_name.status()), \
44 .message = result_name.status().ToString()}}; \
46 lhs = std::move(result_name).ValueOrDie();
48#define ICEBERG_ARROW_ASSIGN_OR_RETURN(lhs, rexpr) \
49 ICEBERG_ARROW_ASSIGN_OR_RETURN_IMPL( \
50 ARROW_ASSIGN_OR_RAISE_NAME(_error_or_value, __COUNTER__), lhs, rexpr, \
51 ::iceberg::arrow::ToErrorKind)
53#define ICEBERG_ARROW_RETURN_NOT_OK(expr) \
55 auto&& _status = (expr); \
56 if (!_status.ok()) { \
57 return std::unexpected<Error>{{.kind = ::iceberg::arrow::ToErrorKind(_status), \
58 .message = _status.ToString()}}; \