Database System 0.1.0
Advanced C++20 Database System with Multi-Backend Support
Loading...
Searching...
No Matches
common_result.h
Go to the documentation of this file.
1// BSD 3-Clause License
2// Copyright (c) 2025, 🍀☀🌕🌥 🌊
3// See the LICENSE file in the project root for full license information.
4
12#pragma once
13
14#include <kcenon/database/config/feature_flags.h>
15
16#if KCENON_HAS_COMMON_SYSTEM
17 // Use common_system's Result implementation directly
18 #include <kcenon/common/patterns/result.h>
19
20 // Re-export at global common:: namespace for backward compatibility
21 namespace common {
22 template<typename T>
23 using Result = kcenon::common::Result<T>;
24 using VoidResult = kcenon::common::VoidResult;
25 using error_info = kcenon::common::error_info;
26
27 // Add ok() helper for VoidResult
28 inline VoidResult ok() {
29 return VoidResult(std::monostate{});
30 }
31 }
32
33 // Import monitoring interfaces separately (only when monitoring_interface.h is included)
34 #ifdef KCENON_COMMON_INTERFACES_MONITORING_INTERFACE_H
35 namespace common {
36 namespace interfaces = kcenon::common::interfaces;
37 }
38 #endif
39#else
40 // Fallback: minimal Result<T> implementation
41 #include <variant>
42 #include <string>
43 #include <utility>
44
45 namespace common {
46 struct error_info {
47 int code{0};
48 std::string message;
49 std::string context;
50 };
51
52 // Alias for backward compatibility
54
55 template<typename T>
56 class Result {
57 public:
58 Result(T value) : data_(std::move(value)) {}
59 Result(error_info error) : data_(std::move(error)) {}
60
61 bool is_ok() const { return std::holds_alternative<T>(data_); }
62 bool is_error() const { return !is_ok(); }
63
64 T& value() { return std::get<T>(data_); }
65 const T& value() const { return std::get<T>(data_); }
66
67 error_info& error() { return std::get<error_info>(data_); }
68 const error_info& error() const { return std::get<error_info>(data_); }
69
70 private:
71 std::variant<T, error_info> data_;
72 };
73
75
76 // Helper functions
77 inline VoidResult ok() {
78 return VoidResult(std::monostate{});
79 }
80
81 inline VoidResult error(const std::string& msg, int code = -1) {
82 return VoidResult(error_info{code, msg, ""});
83 }
84 }
85#endif
const T & value() const
bool is_ok() const
Result(error_info error)
error_info & error()
const error_info & error() const
bool is_error() const
std::variant< T, error_info > data_
VoidResult ok()
Result< std::monostate > VoidResult
VoidResult error(const std::string &msg, int code=-1)
kcenon::common::error_info error_info
Primary error type.
Definition result.h:36
kcenon::common::Result< T > Result
Primary Result type - use this for all database operations.
Definition result.h:30
std::string message
std::string context