From 23056bcac52ad8dfb51b9318b2f66a601189e2bb Mon Sep 17 00:00:00 2001 From: Nav Date: Sun, 6 Oct 2024 18:08:29 +0100 Subject: [PATCH] New `Expected` template (should have been included in a previous commit) --- src/Helpers/Expected.hpp | 39 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 src/Helpers/Expected.hpp diff --git a/src/Helpers/Expected.hpp b/src/Helpers/Expected.hpp new file mode 100644 index 00000000..1e18f33e --- /dev/null +++ b/src/Helpers/Expected.hpp @@ -0,0 +1,39 @@ +#pragma once + +#include +#include + +template +struct Expected +{ + Expected(SuccessType&& result) + requires ( + !std::is_reference_v + && !std::is_fundamental_v + ) + : result(std::move(result)) + {} + + Expected(const SuccessType& result) + : result(result) + {} + + Expected(const ErrorType& result) + : result(result) + {} + + bool hasValue() const { + return std::holds_alternative(this->result); + } + + const SuccessType& value() const { + return std::get(this->result); + } + + const ErrorType& error() const { + return std::get(this->result); + } + +private: + std::variant result; +};