AK: Add some more ways to construct Error and ErrorOr<T>

This is preparation for using Error in the kernel instead of KResult.
This commit is contained in:
Andreas Kling 2021-11-08 00:36:35 +01:00
parent 5e473a63d3
commit 7ee10c6926

View file

@ -58,6 +58,12 @@ public:
{
}
template<typename U>
ALWAYS_INLINE ErrorOr(U&& value) requires(!IsSame<RemoveCVReference<U>, ErrorOr<T>>)
: m_value(forward<U>(value))
{
}
#ifdef __serenity__
ErrorOr(ErrnoCode code)
: m_error(Error::from_errno(code))
@ -74,6 +80,9 @@ public:
ErrorOr(ErrorOr const& other) = default;
~ErrorOr() = default;
ErrorOr& operator=(ErrorOr&& other) = default;
ErrorOr& operator=(ErrorOr const& other) = default;
T& value() { return m_value.value(); }
Error& error() { return m_error.value(); }
@ -98,11 +107,21 @@ public:
{
}
#ifdef __serenity__
ErrorOr(ErrnoCode code)
: m_error(Error::from_errno(code))
{
}
#endif
ErrorOr() = default;
ErrorOr(ErrorOr&& other) = default;
ErrorOr(const ErrorOr& other) = default;
ErrorOr(ErrorOr const& other) = default;
~ErrorOr() = default;
ErrorOr& operator=(ErrorOr&& other) = default;
ErrorOr& operator=(ErrorOr const& other) = default;
ErrorType& error() { return m_error.value(); }
bool is_error() const { return m_error.has_value(); }
ErrorType release_error() { return m_error.release_value(); }