From da393b38a099067bb5172115cb5df151b0d3b75a Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?St=C3=A9phane=20Del=20Pino?= <stephane.delpino44@gmail.com>
Date: Wed, 15 Mar 2023 08:19:12 +0100
Subject: [PATCH] Fix Embedded data tuples as return type

---
 .../utils/BuiltinFunctionEmbedder.hpp         | 19 +++++++++++++++----
 1 file changed, 15 insertions(+), 4 deletions(-)

diff --git a/src/language/utils/BuiltinFunctionEmbedder.hpp b/src/language/utils/BuiltinFunctionEmbedder.hpp
index 460ec3e86..251c39e6d 100644
--- a/src/language/utils/BuiltinFunctionEmbedder.hpp
+++ b/src/language/utils/BuiltinFunctionEmbedder.hpp
@@ -114,10 +114,21 @@ class BuiltinFunctionEmbedderBase<FX(Args...)> : public IBuiltinFunctionEmbedder
   }
 
   template <typename T>
-  PUGS_INLINE std::shared_ptr<IDataHandler>
+  PUGS_INLINE EmbeddedData
   _createHandler(std::shared_ptr<T> data) const
   {
-    return std::make_shared<DataHandler<T>>(data);
+    return EmbeddedData{std::make_shared<DataHandler<T>>(data)};
+  }
+
+  template <typename T>
+  PUGS_INLINE std::vector<EmbeddedData>
+  _createHandler(std::vector<std::shared_ptr<T>> data) const
+  {
+    std::vector<EmbeddedData> embedded(data.size());
+    for (size_t i_data = 0; i_data < data.size(); ++i_data) {
+      embedded[i_data] = EmbeddedData(std::make_shared<DataHandler<T>>(data[i_data]));
+    }
+    return embedded;
   }
 
   template <typename ResultT>
@@ -127,7 +138,7 @@ class BuiltinFunctionEmbedderBase<FX(Args...)> : public IBuiltinFunctionEmbedder
     if constexpr (is_data_variant_v<std::decay_t<ResultT>>) {
       return std::move(result);
     } else {
-      return EmbeddedData(_createHandler(std::move(result)));
+      return _createHandler(std::move(result));
     }
   }
 
@@ -327,7 +338,7 @@ class BuiltinFunctionEmbedder<FX(Args...)> : public BuiltinFunctionEmbedderBase<
       std::apply(m_f, t);
       return {};
     } else {
-      return EmbeddedData(this->template _createHandler(std::apply(m_f, t)));
+      return this->template _createHandler(std::apply(m_f, t));
     }
   }
 
-- 
GitLab