summaryrefslogtreecommitdiff
path: root/include/result.hpp
diff options
context:
space:
mode:
authorDominick Allen <djallen@librehumanitas.org>2024-09-22 10:19:15 -0500
committerDominick Allen <djallen@librehumanitas.org>2024-09-22 10:19:15 -0500
commitbf81e34921e3e30b05313efbcf5c9fa839cb7c05 (patch)
treeb56a343e59164bc347232669e8bb808cf3c4f4ef /include/result.hpp
Initial commit.
Diffstat (limited to 'include/result.hpp')
-rw-r--r--include/result.hpp83
1 files changed, 83 insertions, 0 deletions
diff --git a/include/result.hpp b/include/result.hpp
new file mode 100644
index 0000000..158afd1
--- /dev/null
+++ b/include/result.hpp
@@ -0,0 +1,83 @@
+/*
+ * LibFud
+ * Copyright 2024 Dominick Allen
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef BOOKMOUSE_RESULT_HPP
+#define BOOKMOUSE_RESULT_HPP
+
+#include <utility>
+#include <variant>
+
+namespace fud {
+
+template<typename T, typename E>
+class Result {
+public:
+ using ResultType = Result<T, E>;
+ static ResultType okay(const T& okay)
+ {
+ return ResultType{okay};
+ }
+
+ static ResultType okay(T&& okay)
+ {
+ return ResultType{std::move(okay)};
+ }
+
+ static ResultType error(const E& error)
+ {
+ return ResultType{error};
+ }
+
+ static ResultType error(E&& error)
+ {
+ return ResultType{std::move(error)};
+ }
+
+ [[nodiscard]] constexpr bool isOkay() const
+ {
+ return(m_value.index() == 0);
+ }
+
+ [[nodiscard]] constexpr bool isError() const
+ {
+ return(m_value.index() == 1);
+ }
+
+ T getOkay()
+ {
+ return std::get<T>(m_value);
+ }
+
+ E getError()
+ {
+ return std::get<E>(m_value);
+ }
+
+private:
+ explicit Result() : m_value() {}
+ explicit Result(const T& value) : m_value(value) {}
+ explicit Result(const E& value) : m_value(value) {}
+
+ explicit Result(T&& value) : m_value(std::move(value)) {}
+ explicit Result(E&& value) : m_value(std::move(value)) {}
+
+ std::variant<T, E> m_value;
+};
+
+} // namespace bookmouse
+
+#endif