diff --git a/source/RobotAPI/libraries/skills/core/CMakeLists.txt b/source/RobotAPI/libraries/skills/core/CMakeLists.txt index 29145e60e305fa10decf06200685dcb99ec6a3d5..ad74a2763e350da6eaa72cf550b23acd0271d07f 100644 --- a/source/RobotAPI/libraries/skills/core/CMakeLists.txt +++ b/source/RobotAPI/libraries/skills/core/CMakeLists.txt @@ -26,8 +26,10 @@ armarx_add_library( Skill.cpp SkillProxy.cpp SkillDescription.cpp + FluxioResult.cpp HEADERS error/Exception.h + FluxioResult.h SkillID.h ProviderID.h ProviderInfo.h diff --git a/source/RobotAPI/libraries/skills/core/FluxioResult.cpp b/source/RobotAPI/libraries/skills/core/FluxioResult.cpp new file mode 100644 index 0000000000000000000000000000000000000000..457081a9d161d1e351a6d12a7134e47781f9e4ba --- /dev/null +++ b/source/RobotAPI/libraries/skills/core/FluxioResult.cpp @@ -0,0 +1,30 @@ +#include <stdexcept> + +template<typename T, typename E = std::exception> + +class Result { + private: bool success_; T result_; E error_; //maybe even an error list for a better stacktrace + + public: + Result(const T& res) : success_(true), result_(res) {} + + Result(const E& err) : success_(false), error_(err) {} + + bool isSuccess() const { + return success_; + } + + T getResult() const { + if (!success_) { + throw std::logic_error("Result is not successful"); + } + return result_; + } + + E getError() const { + if (success_) { + throw std::logic_error("Result does not contain an error"); + } + return error_; + } +}; \ No newline at end of file diff --git a/source/RobotAPI/libraries/skills/core/FluxioResult.h b/source/RobotAPI/libraries/skills/core/FluxioResult.h new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391