#ifndef SIBS_RESULT_HPP #define SIBS_RESULT_HPP #include #include namespace sibs { template class Result { public: static Result Ok(const T &value) { Result result(value); result.error = false; return result; } static Result Err(const std::string &errMsg) { Result result; result.errMsg = errMsg; result.error = true; return result; } bool isOk() const { return !error; } bool isErr() const { return error; } T& unwrap() { assert(isOk()); return value; } const std::string &getErrMsg() const { assert(isErr()); return errMsg; } private: Result(const T &_value = T()) : value(_value) {} private: T value; std::string errMsg; bool error; }; } #endif //SIBS_RESULT_HPP