From e253cf694e5c710303bb6560315e80e79d5664bd Mon Sep 17 00:00:00 2001 From: Andreas Kling Date: Sun, 7 Nov 2021 01:30:35 +0100 Subject: [PATCH] AK: Allow subclassing Error --- AK/Error.h | 24 +++++++++++++----------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/AK/Error.h b/AK/Error.h index bdc495f889d..f79e2ff1517 100644 --- a/AK/Error.h +++ b/AK/Error.h @@ -28,12 +28,13 @@ public: int code() const { return m_code; } StringView string_literal() const { return m_string_literal; } -private: +protected: Error(int code) : m_code(code) { } +private: Error(StringView string_literal) : m_string_literal(string_literal) { @@ -43,7 +44,7 @@ private: StringView m_string_literal; }; -template +template class [[nodiscard]] ErrorOr { public: ErrorOr(T const& value) @@ -63,7 +64,7 @@ public: } #endif - ErrorOr(Error&& error) + ErrorOr(ErrorType&& error) : m_error(move(error)) { } @@ -78,20 +79,20 @@ public: bool is_error() const { return m_error.has_value(); } T release_value() { return m_value.release_value(); } - Error release_error() { return m_error.release_value(); } + ErrorType release_error() { return m_error.release_value(); } T release_value_but_fixme_should_propagate_errors() { return release_value(); } private: Optional m_value; - Optional m_error; + Optional m_error; }; // Partial specialization for void value type -template<> -class [[nodiscard]] ErrorOr { +template +class [[nodiscard]] ErrorOr { public: - ErrorOr(Error error) + ErrorOr(ErrorType error) : m_error(move(error)) { } @@ -101,12 +102,13 @@ public: ErrorOr(const ErrorOr& other) = default; ~ErrorOr() = default; - Error& error() { return m_error.value(); } + ErrorType& error() { return m_error.value(); } bool is_error() const { return m_error.has_value(); } - Error release_error() { return m_error.release_value(); } + ErrorType release_error() { return m_error.release_value(); } + void release_value() { } private: - Optional m_error; + Optional m_error; }; template<>