#pragma once #include #include namespace flog { template class PushResult { public: _NODISCARD static PushResult success() noexcept { return PushResult(); } _NODISCARD static PushResult failWithValue(T value) noexcept { return PushResult(std::move(std::optional(std::move(value)))); } _NODISCARD bool isSuccessful() const noexcept { return !m_value.has_value(); } _NODISCARD bool isFail() const noexcept { return m_value.has_value(); } void getValueIfFail(const std::function func) const { if (isFail()) { func(m_value.value()); } } _NODISCARD T getValue() const { return m_value.value(); } PushResult(const PushResult &other) noexcept { m_value = other.m_value; } private: PushResult() noexcept = default; explicit PushResult(std::optional value) noexcept : m_value(std::move(value)) {} const std::optional m_value = std::nullopt; }; }