Compare commits

..

2 Commits

View File

@ -167,28 +167,28 @@ struct [[nodiscard]] Result {
constexpr Error copyTo(type &val) const & noexcept { constexpr Error copyTo(type &val) const & noexcept {
if (!error) [[likely]] { if (!error) [[likely]] {
*val = value; val = value;
} }
return error; return error;
} }
constexpr Error copyTo(type &val) const && noexcept { constexpr Error copyTo(type &val) const && noexcept {
if (!error) [[likely]] { if (!error) [[likely]] {
*val = value; val = value;
} }
return error; return error;
} }
constexpr Error copyTo(type &val) & noexcept { constexpr Error copyTo(type &val) & noexcept {
if (!error) [[likely]] { if (!error) [[likely]] {
*val = value; val = value;
} }
return error; return error;
} }
constexpr Error copyTo(type &val) && noexcept { constexpr Error copyTo(type &val) && noexcept {
if (!error) [[likely]] { if (!error) [[likely]] {
*val = std::move(value); val = std::move(value);
} }
return error; return error;
} }
@ -200,6 +200,7 @@ struct [[nodiscard]] Result {
return error; return error;
} }
[[nodiscard]]
constexpr T &unwrap() & noexcept { constexpr T &unwrap() & noexcept {
if (error) { if (error) {
oxPanic(error, "Failed unwrap"); oxPanic(error, "Failed unwrap");
@ -207,6 +208,7 @@ struct [[nodiscard]] Result {
return value; return value;
} }
[[nodiscard]]
constexpr T &&unwrap() && noexcept { constexpr T &&unwrap() && noexcept {
if (error) { if (error) {
oxPanic(error, "Failed unwrap"); oxPanic(error, "Failed unwrap");
@ -214,6 +216,7 @@ struct [[nodiscard]] Result {
return std::move(value); return std::move(value);
} }
[[nodiscard]]
constexpr T const&unwrap() const & noexcept { constexpr T const&unwrap() const & noexcept {
if (error) [[unlikely]] { if (error) [[unlikely]] {
oxPanic(error, "Failed unwrap"); oxPanic(error, "Failed unwrap");
@ -221,6 +224,7 @@ struct [[nodiscard]] Result {
return value; return value;
} }
[[nodiscard]]
constexpr T &unwrapThrow() & { constexpr T &unwrapThrow() & {
if (error) { if (error) {
throw ox::Exception(error); throw ox::Exception(error);
@ -228,6 +232,7 @@ struct [[nodiscard]] Result {
return value; return value;
} }
[[nodiscard]]
constexpr T &&unwrapThrow() && { constexpr T &&unwrapThrow() && {
if (error) { if (error) {
throw ox::Exception(error); throw ox::Exception(error);
@ -235,6 +240,7 @@ struct [[nodiscard]] Result {
return std::move(value); return std::move(value);
} }
[[nodiscard]]
constexpr T const&unwrapThrow() const & { constexpr T const&unwrapThrow() const & {
if (error) { if (error) {
throw ox::Exception(error); throw ox::Exception(error);
@ -243,13 +249,21 @@ struct [[nodiscard]] Result {
} }
template<typename U = T> template<typename U = T>
constexpr ox::Result<U> to(const auto &f) noexcept { constexpr ox::Result<U> to(auto const&f) & noexcept {
if (error) [[unlikely]] { if (error) [[unlikely]] {
return OxError(1); return error;
} }
return f(value); return f(value);
} }
template<typename U = T>
constexpr ox::Result<U> to(auto const&f) && noexcept {
if (error) [[unlikely]] {
return error;
}
return f(std::move(value));
}
}; };
namespace detail { namespace detail {