8#include "libmicroemu/types.h"
15template <
typename T,
typename TStatusCode = StatusCode>
struct Result {
17 using StatusCode = TStatusCode;
19 const StatusCode status_code;
20 const Content content;
25 constexpr bool operator==(Result<T>
const &rhs)
const noexcept {
26 return (rhs.status_code == this->status_code) && (rhs.content == this->content);
29 constexpr const Content &Unwrap()
const noexcept {
38 explicit constexpr Result(StatusCode status_code, Content content) noexcept
39 : status_code(status_code), content(content) {}
42 constexpr Result(Result &&r)
noexcept =
default;
45 constexpr Result &operator=(Result &&r) =
delete;
48 constexpr Result(
const Result &r)
noexcept =
default;
51 constexpr Result &operator=(
const Result &r) =
delete;
54template <>
struct Result<void> {
57 const StatusCode status_code;
62 constexpr bool operator==(Result<void>
const &rhs)
const noexcept {
63 return (rhs.status_code == this->status_code);
66 constexpr void Unwrap()
const noexcept {
72 constexpr std::string_view ToString()
const noexcept {
return StatusCodeToString(status_code); }
74 constexpr Result(StatusCode status_code) noexcept : status_code(status_code) {}
77 constexpr Result(Result &&r)
noexcept =
default;
80 constexpr Result &operator=(Result &&r) =
delete;
83 constexpr Result(
const Result &r)
noexcept =
default;
86 constexpr Result &operator=(
const Result &r) =
delete;
90template <
typename T>
static constexpr Result<T> Ok(
const T &content)
noexcept {
102template <
typename TIn,
typename TRet>
103static constexpr std::enable_if_t<!std::is_same_v<TRet, void>,
Result<TRet>>
108template <
typename TIn,
typename TRet>
109static constexpr std::enable_if_t<std::is_same_v<TRet, void>,
Result<TRet>>
123#define TRY_ASSIGN(NAME, OUT_TYPE, CALL) \
124 auto r_##NAME = CALL; \
125 if (r_##NAME.IsErr()) { \
126 using t_ret_decl = decltype(CALL); \
127 using t_ret = typename t_ret_decl::Content; \
128 return Err<t_ret, OUT_TYPE>(r_##NAME); \
130 const auto &NAME = r_##NAME.content;
138#define TRY(OUT_TYPE, CALL) \
141 if (r_tmp.IsErr()) { \
142 using t_ret_decl = decltype(CALL); \
143 using t_ret = typename t_ret_decl::Content; \
144 return Err<t_ret, OUT_TYPE>(r_tmp); \
The libmicroemu::internal namespace contains all classes and functions of libmicroemu which are priva...
Definition bkpt_flags.h:6
static std::string_view StatusCodeToString(const StatusCode &status_code) noexcept
Converts a status code to a string.
Definition status_code.h:108
StatusCode
Enum representing various status codes used throughout the system.
Definition status_code.h:17
@ kSuccess
Operation succeeded successfully.
Definition status_code.h:20
File contains enum class for status codes.