|
| template<typename T > |
| auto | return_if_error (const Result< T > &result) -> std::optional< error_info > |
| | Return error if Result is in error state (type-safe alternative to RETURN_IF_ERROR)
|
| |
| template<typename T > |
| auto | try_extract (Result< T > &&result) -> std::conditional_t< std::is_void_v< T >, Result< std::monostate >, Result< T > > |
| | Safely extract value from Result or return error.
|
| |
| auto | error_if (bool condition, const error_info &error) -> std::optional< error_info > |
| | Check condition and return error if false (type-safe alternative to RETURN_ERROR_IF)
|
| |
| auto | make_error (int code, const std::string &message, const std::string &module="") noexcept -> error_info |
| | Create error_info with code, message, and module (type-safe)
|
| |
| auto | make_error_with_details (int code, const std::string &message, const std::string &module, const std::string &details) noexcept -> error_info |
| | Create error_info with code, message, module, and details.
|
| |
| template<typename... Funcs> |
| auto | chain (Funcs &&... funcs) |
| | Chain multiple Result-returning operations.
|
| |
| template<typename Func > |
| auto | safe_execute (Func &&func, const std::string &module="") -> Result< std::invoke_result_t< Func > > |
| | Execute function and convert exceptions to Result.
|
| |
| template<typename T , typename ErrorHandler > |
| auto | unwrap_or_handle (Result< T > &&result, ErrorHandler &&error_handler) -> T |
| | Unwrap Result with custom error handler.
|
| |
| template<typename... Results> |
| auto | combine_results (Results &&... results) -> Result< std::tuple< typename std::decay_t< Results >::value_type... > > |
| | Combine multiple Results into a single Result containing a tuple.
|
| |
template<typename... Funcs>
| auto kcenon::common::helpers::chain |
( |
Funcs &&... | funcs | ) |
|
|
nodiscard |
Chain multiple Result-returning operations.
- Parameters
-
| funcs | Variadic list of functions returning Result<T> |
- Returns
- Result of the last successful operation, or first error
Usage: auto result = chain( []() { return operation1(); }, [](auto& r1) { return operation2(r1); }, [](auto& r2) { return operation3(r2); } );
Definition at line 138 of file result_helpers.h.
138 {
139 using FirstResult = std::invoke_result_t<std::tuple_element_t<0, std::tuple<Funcs...>>>;
140
141 FirstResult result = std::get<0>(std::forward_as_tuple(funcs...))();
142
143 if constexpr (sizeof...(funcs) > 1) {
144 ([&]<typename Func>(Func&& func) {
145 if (result.is_ok()) {
146 result = func(result.value());
147 }
148 }(std::forward<Funcs>(funcs)), ...);
149 }
150
151 return result;
152}
template<typename T , typename ErrorHandler >
| auto kcenon::common::helpers::unwrap_or_handle |
( |
Result< T > && | result, |
|
|
ErrorHandler && | error_handler ) -> T
|
|
nodiscard |
Unwrap Result with custom error handler.
- Parameters
-
| result | The Result to unwrap |
| error_handler | Function called if result is error |
- Returns
- Value if ok, or default-constructed T if error
Usage: int value = unwrap_or_handle(result, [](const auto& err) { log_error("Operation failed: {}", err.message); });
Definition at line 194 of file result_helpers.h.
195{
197 error_handler(result.
error());
198 return T{};
199 }
200 return std::move(result).value();
201}