2828namespace iceberg {
2929
3030// / \brief Error types for iceberg.
31- // / TODO: add more and sort them based on some rules.
3231enum class ErrorKind {
33- kNoSuchNamespace ,
3432 kAlreadyExists ,
35- kNoSuchTable ,
3633 kCommitStateUnknown ,
37- kInvalidSchema ,
3834 kInvalidArgument ,
35+ kInvalidExpression ,
36+ kInvalidSchema ,
3937 kIOError ,
38+ kJsonParseError ,
39+ kNoSuchNamespace ,
40+ kNoSuchTable ,
4041 kNotImplemented ,
41- kUnknownError ,
4242 kNotSupported ,
43- kInvalidExpression ,
44- kJsonParseError ,
43+ kUnknownError ,
4544};
4645
4746// / \brief Error with a kind and a message.
@@ -62,19 +61,27 @@ using Result = expected<T, E>;
6261
6362using Status = Result<void >;
6463
65- // / \brief Create an unexpected error with kNotImplemented
64+ // / \brief Create an unexpected error with kAlreadyExists
6665template <typename ... Args>
67- auto NotImplementedError (const std::format_string<Args...> fmt, Args&&... args)
66+ auto AlreadyExistsError (const std::format_string<Args...> fmt, Args&&... args)
6867 -> unexpected<Error> {
69- return unexpected<Error>({.kind = ErrorKind::kNotImplemented ,
68+ return unexpected<Error>({.kind = ErrorKind::kAlreadyExists ,
7069 .message = std::format (fmt, std::forward<Args>(args)...)});
7170}
7271
73- // / \brief Create an unexpected error with kJsonParseError
72+ // / \brief Create an unexpected error with kCommitStateUnknown
7473template <typename ... Args>
75- auto JsonParseError (const std::format_string<Args...> fmt, Args&&... args)
74+ auto CommitStateUnknownError (const std::format_string<Args...> fmt, Args&&... args)
7675 -> unexpected<Error> {
77- return unexpected<Error>({.kind = ErrorKind::kJsonParseError ,
76+ return unexpected<Error>({.kind = ErrorKind::kCommitStateUnknown ,
77+ .message = std::format (fmt, std::forward<Args>(args)...)});
78+ }
79+
80+ // / \brief Create an unexpected error with kInvalidArgument
81+ template <typename ... Args>
82+ auto InvalidArgumentError (const std::format_string<Args...> fmt, Args&&... args)
83+ -> unexpected<Error> {
84+ return unexpected<Error>({.kind = ErrorKind::kInvalidArgument ,
7885 .message = std::format (fmt, std::forward<Args>(args)...)});
7986}
8087
@@ -86,4 +93,67 @@ auto InvalidExpressionError(const std::format_string<Args...> fmt, Args&&... arg
8693 .message = std::format (fmt, std::forward<Args>(args)...)});
8794}
8895
96+ // / \brief Create an unexpected error with kInvalidSchema
97+ template <typename ... Args>
98+ auto InvalidSchemaError (const std::format_string<Args...> fmt, Args&&... args)
99+ -> unexpected<Error> {
100+ return unexpected<Error>({.kind = ErrorKind::kInvalidSchema ,
101+ .message = std::format (fmt, std::forward<Args>(args)...)});
102+ }
103+
104+ // / \brief Create an unexpected error with kIOError
105+ template <typename ... Args>
106+ auto IOError (const std::format_string<Args...> fmt, Args&&... args) -> unexpected<Error> {
107+ return unexpected<Error>({.kind = ErrorKind::kIOError ,
108+ .message = std::format (fmt, std::forward<Args>(args)...)});
109+ }
110+
111+ // / \brief Create an unexpected error with kJsonParseError
112+ template <typename ... Args>
113+ auto JsonParseError (const std::format_string<Args...> fmt, Args&&... args)
114+ -> unexpected<Error> {
115+ return unexpected<Error>({.kind = ErrorKind::kJsonParseError ,
116+ .message = std::format (fmt, std::forward<Args>(args)...)});
117+ }
118+
119+ // / \brief Create an unexpected error with kNoSuchNamespace
120+ template <typename ... Args>
121+ auto NoSuchNamespaceError (const std::format_string<Args...> fmt, Args&&... args)
122+ -> unexpected<Error> {
123+ return unexpected<Error>({.kind = ErrorKind::kNoSuchNamespace ,
124+ .message = std::format (fmt, std::forward<Args>(args)...)});
125+ }
126+
127+ // / \brief Create an unexpected error with kNoSuchTable
128+ template <typename ... Args>
129+ auto NoSuchTableError (const std::format_string<Args...> fmt, Args&&... args)
130+ -> unexpected<Error> {
131+ return unexpected<Error>({.kind = ErrorKind::kNoSuchTable ,
132+ .message = std::format (fmt, std::forward<Args>(args)...)});
133+ }
134+
135+ // / \brief Create an unexpected error with kNotImplemented
136+ template <typename ... Args>
137+ auto NotImplementedError (const std::format_string<Args...> fmt, Args&&... args)
138+ -> unexpected<Error> {
139+ return unexpected<Error>({.kind = ErrorKind::kNotImplemented ,
140+ .message = std::format (fmt, std::forward<Args>(args)...)});
141+ }
142+
143+ // / \brief Create an unexpected error with kNotSupported
144+ template <typename ... Args>
145+ auto NotSupportedError (const std::format_string<Args...> fmt, Args&&... args)
146+ -> unexpected<Error> {
147+ return unexpected<Error>({.kind = ErrorKind::kNotSupported ,
148+ .message = std::format (fmt, std::forward<Args>(args)...)});
149+ }
150+
151+ // / \brief Create an unexpected error with kUnknownError
152+ template <typename ... Args>
153+ auto UnknownError (const std::format_string<Args...> fmt, Args&&... args)
154+ -> unexpected<Error> {
155+ return unexpected<Error>({.kind = ErrorKind::kUnknownError ,
156+ .message = std::format (fmt, std::forward<Args>(args)...)});
157+ }
158+
89159} // namespace iceberg
0 commit comments