diff options
-rw-r--r-- | AK/Error.h | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/AK/Error.h b/AK/Error.h new file mode 100644 index 0000000000..b91721920d --- /dev/null +++ b/AK/Error.h @@ -0,0 +1,53 @@ +#pragma once + +#include <AK/Platform.h> + +namespace AK { + +template <typename T, auto NoErrorValue> +class CONSUMABLE(unknown) Error { +public: + RETURN_TYPESTATE(unknown) + Error() + : t(NoErrorValue) + {} + + RETURN_TYPESTATE(unknown) + Error(T t) + : t(t) + {} + + RETURN_TYPESTATE(unknown) + Error(Error&& other) + : t(move(other.t)) + { + } + + RETURN_TYPESTATE(unknown) + Error(const Error& other) + : t(other.t) + { + } + + CALLABLE_WHEN("unknown", "consumed") + ~Error() {} + + SET_TYPESTATE(consumed) + bool failed() const { + return t != NoErrorValue; + } + + [[deprecated]] + SET_TYPESTATE(consumed) + void ignore() {} + + const T& value() const { return t; } + + bool operator==(const Error& o) { return t == o.t; } + bool operator!=(const Error& o) { return t != o.t; } + T t; +}; + +} + +using AK::Error; |