21#include <system_error>
36namespace error_codes {
37 using namespace error::codes::common_errors;
76inline Result<T>
ok(T value) {
77 return Result<T>(std::move(value));
91inline Result<T>
make_error(
int code,
const std::string& message,
92 const std::string& module =
"") {
93 return Result<T>(error_info{code, message, module});
100inline Result<T>
make_error(
int code,
const std::string& message,
101 const std::string& module,
102 const std::string& details) {
103 return Result<T>(error_info{code, message, module, details});
111 return Result<T>(
err);
126 "Non-standard exception (not derived from std::exception)"};
143template<
typename T,
typename F>
144Result<T>
try_catch(F&& func,
const std::string& module =
"") {
146 return ok<T>(func());
148 catch (
const std::bad_alloc& e) {
151 catch (
const std::invalid_argument& e) {
154 catch (
const std::out_of_range& e) {
157 catch (
const std::system_error& e) {
158 return Result<T>(error_info{e.code().value(), e.what(), module,
159 std::string(
"std::system_error: ") + e.code().category().name()});
161 catch (
const std::logic_error& e) {
164 catch (
const std::runtime_error& e) {
167 catch (
const std::exception& e) {
189 catch (
const std::bad_alloc& e) {
192 catch (
const std::invalid_argument& e) {
195 catch (
const std::out_of_range& e) {
198 catch (
const std::system_error& e) {
199 return VoidResult(error_info{e.code().value(), e.what(), module,
200 std::string(
"std::system_error: ") + e.code().category().name()});
202 catch (
const std::logic_error& e) {
205 catch (
const std::runtime_error& e) {
208 catch (
const std::exception& e) {
Maps standard exception types to appropriate error codes.
static error_info map_unknown_exception(const std::string &module="")
static error_info map_generic_exception(const std::exception &e, const std::string &module="")
constexpr int registry_frozen
constexpr int not_initialized
constexpr int permission_denied
constexpr int already_exists
constexpr int network_error
constexpr int out_of_memory
constexpr int invalid_argument
constexpr int internal_error
constexpr int NETWORK_ERROR_BASE
constexpr int PERMISSION_DENIED
constexpr int REGISTRY_FROZEN
constexpr int CONTAINER_ERROR_BASE
constexpr int MONITORING_ERROR_BASE
constexpr int THREAD_ERROR_BASE
constexpr int ALREADY_EXISTS
constexpr int LOGGER_ERROR_BASE
constexpr int OUT_OF_MEMORY
constexpr int INVALID_ARGUMENT
constexpr int INTERNAL_ERROR
constexpr int DATABASE_ERROR_BASE
constexpr int NETWORK_ERROR
constexpr int NOT_INITIALIZED
Result< T > make_error(int code, const std::string &message, const std::string &module="")
Create an error result with code and message.
Result< std::monostate > VoidResult
Specialized Result for void operations.
Result< T > try_catch(F &&func, const std::string &module="")
Convert exception to Result with automatic error code mapping.
VoidResult err(const error_info &error)
Factory function to create error VoidResult.
VoidResult ok()
Create a successful void result.
VoidResult try_catch_void(F &&func, const std::string &module="")
Convert exception to VoidResult with automatic error code mapping.
Standard error information used by Result<T>.