aboutsummaryrefslogtreecommitdiff
path: root/libs/kstd
diff options
context:
space:
mode:
Diffstat (limited to 'libs/kstd')
-rw-r--r--libs/kstd/kstd/result.hpp35
1 files changed, 35 insertions, 0 deletions
diff --git a/libs/kstd/kstd/result.hpp b/libs/kstd/kstd/result.hpp
new file mode 100644
index 00000000..7b027a8d
--- /dev/null
+++ b/libs/kstd/kstd/result.hpp
@@ -0,0 +1,35 @@
+#ifndef KSTD_RESULT_HPP
+#define KSTD_RESULT_HPP
+
+#include <kstd/system_error.hpp>
+
+#include <expected>
+#include <type_traits>
+#include <utility>
+
+namespace kstd
+{
+
+ template<typename SuccessType>
+ using result = std::expected<SuccessType, error_code>;
+
+ template<typename SuccessType>
+ requires(!std::is_void_v<SuccessType>)
+ constexpr auto inline success(SuccessType && value) -> result<std::remove_cvref_t<SuccessType>>
+ {
+ return result<std::remove_cvref_t<SuccessType>>{std::in_place, std::forward<SuccessType>(value)};
+ }
+
+ constexpr auto inline success() -> result<void>
+ {
+ return result<void>{std::in_place};
+ }
+
+ constexpr auto inline failure(error_code error) -> std::unexpected<error_code>
+ {
+ return std::unexpected(error);
+ }
+
+} // namespace kstd
+
+#endif \ No newline at end of file