From 4b4f43504aa72d79965164918f2f139a007b9dc4 Mon Sep 17 00:00:00 2001
From: uyqhv_engel <uyqhv@student.kit.edu>
Date: Mon, 29 Apr 2024 18:31:22 +0200
Subject: [PATCH] build works (Yippie)

---
 .../libraries/skills/core/FluxioResult.cpp    | 36 -------------
 .../libraries/skills/core/FluxioResult.h      | 51 ++++++++++++++-----
 .../SkillManagerComponentPluginUser.cpp       | 10 ++--
 3 files changed, 43 insertions(+), 54 deletions(-)

diff --git a/source/RobotAPI/libraries/skills/core/FluxioResult.cpp b/source/RobotAPI/libraries/skills/core/FluxioResult.cpp
index c76c3293c..e69de29bb 100644
--- a/source/RobotAPI/libraries/skills/core/FluxioResult.cpp
+++ b/source/RobotAPI/libraries/skills/core/FluxioResult.cpp
@@ -1,36 +0,0 @@
-#include <stdexcept>
-
-namespace armarx {
-
-    namespace skills {
-    
-        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
index a607e85aa..564890f75 100644
--- a/source/RobotAPI/libraries/skills/core/FluxioResult.h
+++ b/source/RobotAPI/libraries/skills/core/FluxioResult.h
@@ -1,25 +1,50 @@
 #include <stdexcept>
+#include <memory>
 
-namespace armarx {
-    namespace skills {
-        
-        template<typename T, typename E = std::exception>
-        class Result {
+namespace armarx
+{
+    namespace skills
+    {
+
+        template <typename T, typename E = std::exception>
+        class Result
+        {
         private:
-            bool success_;
-            T result_;
-            E error_;
+            const bool success;
+            const std::shared_ptr<const T> result;
+            const std::shared_ptr<const E> error;
 
         public:
-            Result(const T& res) : success_(true), result_(res) {}
+            Result(const T& res) : success(true), result(std::make_shared<const T>(res)), error(nullptr)
+            {
+            }
 
-            Result(const E& err) : success_(false), error_(err) {}
+            Result(const E& err) : success(false), result(nullptr), error(std::make_shared<const E>(err))
+            {
+            }
 
-            bool isSuccess() const {}
+            bool isSuccess() const
+            {
+                return success;
+            }
 
-            T getResult() const {}
+            T getResult() const
+            {
+                if (!success)
+                {
+                    throw std::logic_error("Result is not successful");
+                }
+                return *result;
+            }
 
-            E getError() const {}
+            E getError() const
+            {
+                if (success)
+                {
+                    throw std::logic_error("Result does not contain an error");
+                }
+                return *error;
+            }
         };
     }
 }
diff --git a/source/RobotAPI/libraries/skills/manager/SkillManagerComponentPluginUser.cpp b/source/RobotAPI/libraries/skills/manager/SkillManagerComponentPluginUser.cpp
index a559ad78e..94a93cffd 100644
--- a/source/RobotAPI/libraries/skills/manager/SkillManagerComponentPluginUser.cpp
+++ b/source/RobotAPI/libraries/skills/manager/SkillManagerComponentPluginUser.cpp
@@ -223,14 +223,14 @@ namespace armarx
     IceUtil::Optional<skills::manager::dto::FluxioSkill>
     SkillManagerComponentPluginUser::getSkill(const std::string& id, const Ice::Current& current)
     {
-        auto skill = this->plugin->getSkill(id);
+        auto result = this->plugin->getSkill(id);
 
-        if (skill.has_value())
+        if (result.isSuccess())
         {
-            const auto& s = skill->toManagerIce();
-            if (s.has_value())
+            const auto& skill = result.getResult().toManagerIce();
+            if (skill.has_value())
             {
-                return *s;
+                return *skill;
             }
         }
         return {};
-- 
GitLab