#ifndef SIBS_RESULT_HPP #define SIBS_RESULT_HPP #include namespace sibs { template class Result { public: static Result Ok(const T &value) { return Result(value); } static Result Err(const char *errMsg) { return Result(errMsg); } bool isOk() const { return !errMsg; } bool isErr() const { return errMsg; } T& unwrap() { assert(isOk()); return value; } const char *getErrMsg() const { assert(isErr()); return errMsg; } private: Result(const T &_value) : value(_value), errMsg(nullptr){} Result(const char *_errMsg) : errMsg(_errMsg){} private: T value; const char *errMsg; }; } #endif //SIBS_RESULT_HPP