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; +};