21#include <system_error>
36namespace error_codes {
74inline Result<T>
ok(T value) {
75 return Result<T>(std::move(value));
89inline Result<T>
make_error(
int code,
const std::string& message,
90 const std::string& module =
"") {
91 return Result<T>(error_info{code, message, module});
98inline Result<T>
make_error(
int code,
const std::string& message,
99 const std::string& module,
100 const std::string& details) {
101 return Result<T>(error_info{code, message, module, details});
109 return Result<T>(
err);
124 "Non-standard exception (not derived from std::exception)"};
141template<
typename T,
typename F>
142Result<T>
try_catch(F&& func,
const std::string& module =
"") {
144 return ok<T>(func());
146 catch (
const std::bad_alloc& e) {
149 catch (
const std::invalid_argument& e) {
152 catch (
const std::out_of_range& e) {
155 catch (
const std::system_error& e) {
156 return Result<T>(error_info{e.code().value(), e.what(), module,
157 std::string(
"std::system_error: ") + e.code().category().name()});
159 catch (
const std::logic_error& e) {
162 catch (
const std::runtime_error& e) {
165 catch (
const std::exception& e) {
187 catch (
const std::bad_alloc& e) {
190 catch (
const std::invalid_argument& e) {
193 catch (
const std::out_of_range& e) {
196 catch (
const std::system_error& e) {
197 return VoidResult(error_info{e.code().value(), e.what(), module,
198 std::string(
"std::system_error: ") + e.code().category().name()});
200 catch (
const std::logic_error& e) {
203 catch (
const std::runtime_error& e) {
206 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>.