From f724543115bd13652e5a91088933653f75745e92 Mon Sep 17 00:00:00 2001
From: Sylvain Buche <sylvain.buche@orange.com>
Date: Fri, 17 May 2024 10:18:20 +0200
Subject: [PATCH] upadate with last version of API, add conversion between
 equivalent WS and WA types

---
 .../OpenAPI/Generated/WorldAnalysisOpenAPI.cs |  4 +-
 Runtime/Scripts/WorldAnalysisInterface.cs     |  4 +-
 Runtime/Scripts/WorldAnalysisREST.cs          |  2 +-
 Runtime/Scripts/WorldAnalysisUnityHelper.cs   | 67 +++++++++++++++++++
 4 files changed, 72 insertions(+), 5 deletions(-)

diff --git a/Runtime/Scripts/OpenAPI/Generated/WorldAnalysisOpenAPI.cs b/Runtime/Scripts/OpenAPI/Generated/WorldAnalysisOpenAPI.cs
index de7c51f..d9ac029 100644
--- a/Runtime/Scripts/OpenAPI/Generated/WorldAnalysisOpenAPI.cs
+++ b/Runtime/Scripts/OpenAPI/Generated/WorldAnalysisOpenAPI.cs
@@ -2343,8 +2343,8 @@ namespace ETSI.ARF.OpenAPI.WorldAnalysis
         [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.StringEnumConverter))]
         public TypeWorldStorage Type { get; set; }
 
-        [Newtonsoft.Json.JsonProperty("capability", Required = Newtonsoft.Json.Required.DisallowNull, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)]
-        public Capability Capability { get; set; }
+        [Newtonsoft.Json.JsonProperty("capabilities", Required = Newtonsoft.Json.Required.DisallowNull, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)]
+        public System.Collections.Generic.ICollection<Capability> Capabilities { get; set; }
 
         private System.Collections.Generic.IDictionary<string, object> _additionalProperties;
 
diff --git a/Runtime/Scripts/WorldAnalysisInterface.cs b/Runtime/Scripts/WorldAnalysisInterface.cs
index 24f1b3b..727ebc5 100644
--- a/Runtime/Scripts/WorldAnalysisInterface.cs
+++ b/Runtime/Scripts/WorldAnalysisInterface.cs
@@ -173,9 +173,9 @@ public interface WorldAnalysisInterface
     /// <param name="uuid">id of the trackable or anchor</param>
     /// <param name="isSupported">trackable or anchor can be estimated on current system</param>
     /// <param name="type">the specified id corresponds to an anchor or trackable</param>
-    /// <param name="capability">metadata associated with the pose estimation of this element</param>
+    /// <param name="capability">list metadata associated with the pose estimation of this element</param>
     /// <returns>Capabilities have correctly identified or not</returns>
-    public CapabilityResult GetCapability(string token, string uuid, out bool isSupported, out TypeWorldStorage type, out Capability capability);
+    public CapabilityResult GetCapability(string token, string uuid, out bool isSupported, out TypeWorldStorage type, out Capability [] capability);
 
     #endregion
 }
\ No newline at end of file
diff --git a/Runtime/Scripts/WorldAnalysisREST.cs b/Runtime/Scripts/WorldAnalysisREST.cs
index a497001..9d1de9d 100644
--- a/Runtime/Scripts/WorldAnalysisREST.cs
+++ b/Runtime/Scripts/WorldAnalysisREST.cs
@@ -89,7 +89,7 @@ public class WorldAnalysisREST : MonoBehaviour, WorldAnalysisInterface
         return CapabilityResult.OK;
     }
 
-    public CapabilityResult GetCapability(string token, string uuid, out bool isSupported, out TypeWorldStorage type, out Capability capability)
+    public CapabilityResult GetCapability(string token, string uuid, out bool isSupported, out TypeWorldStorage type, out Capability [] capability)
     {
         isSupported = false;
         type = TypeWorldStorage.UNKNOWN;
diff --git a/Runtime/Scripts/WorldAnalysisUnityHelper.cs b/Runtime/Scripts/WorldAnalysisUnityHelper.cs
index 65d3829..b6f5b21 100644
--- a/Runtime/Scripts/WorldAnalysisUnityHelper.cs
+++ b/Runtime/Scripts/WorldAnalysisUnityHelper.cs
@@ -87,6 +87,73 @@ public class WorldAnalysisUnityHelper
         return Quaternion.LookRotation(matrix.GetColumn(2), matrix.GetColumn(1));
     }
 
+    /// <summary>
+    /// Duplicated generated code means that we need conversion between similar types
+    /// </summary>
+    /// <param name="value">world storage capability</param>
+    /// <returns>clone</returns>
+    public static ETSI.ARF.OpenAPI.WorldAnalysis.Capability ConvertWorldStorageCapability(ETSI.ARF.OpenAPI.WorldStorage.Capability value)
+    {
+        ETSI.ARF.OpenAPI.WorldAnalysis.Capability resul = new ETSI.ARF.OpenAPI.WorldAnalysis.Capability();
+
+        resul.TrackableType = (ETSI.ARF.OpenAPI.WorldAnalysis.TrackableType)((int)value.TrackableType);
+        resul.EncodingInformation = ConvertWorldStorageEncodingInformation(value.EncodingInformation);
+        resul.Framerate = value.Framerate;
+        resul.Latency = value.Latency;
+        resul.Accuracy = value.Accuracy;
+        resul.AdditionalProperties = value.AdditionalProperties; // need copy?
+
+        return resul;
+    }
+
+    /// <summary>
+    /// Duplicated generated code means that we need conversion between similar types
+    /// </summary>
+    /// <param name="value">world storage encodinginformation</param>
+    /// <returns>clone</returns>
+    public static ETSI.ARF.OpenAPI.WorldAnalysis.EncodingInformationStructure ConvertWorldStorageEncodingInformation(ETSI.ARF.OpenAPI.WorldStorage.EncodingInformationStructure value)
+    {
+        ETSI.ARF.OpenAPI.WorldAnalysis.EncodingInformationStructure resul = new ETSI.ARF.OpenAPI.WorldAnalysis.EncodingInformationStructure();
+        resul.DataFormat = (ETSI.ARF.OpenAPI.WorldAnalysis.EncodingInformationStructureDataFormat)((int)value.DataFormat);
+        resul.Version = value.Version;
+        resul.AdditionalProperties = value.AdditionalProperties; // need copy ?
+        return resul;
+    }
+
+    /// <summary>
+    /// Duplicated generated code means that we need conversion between similar types
+    /// </summary>
+    /// <param name="value">world storage capability</param>
+    /// <returns>clone</returns>
+    public static ETSI.ARF.OpenAPI.WorldStorage.Capability ConvertWorldAnalysisCapability(ETSI.ARF.OpenAPI.WorldAnalysis.Capability value)
+    {
+        ETSI.ARF.OpenAPI.WorldStorage.Capability resul = new ETSI.ARF.OpenAPI.WorldStorage.Capability();
+        resul.TrackableType = (ETSI.ARF.OpenAPI.WorldStorage.TrackableType)((int)value.TrackableType);
+        resul.EncodingInformation = ConvertWorldAnalysisEncodingInformation(value.EncodingInformation);
+
+        resul.Framerate = value.Framerate;
+        resul.Latency = value.Latency;
+        resul.Accuracy = value.Accuracy;
+
+        resul.AdditionalProperties = value.AdditionalProperties; // need copy?
+        return resul;
+    }
+
+
+    /// <summary>
+    /// Duplicated generated code means that we need conversion between similar types
+    /// </summary>
+    /// <param name="value">world analysis encodinginformation</param>
+    /// <returns>clone</returns>
+    public static ETSI.ARF.OpenAPI.WorldStorage.EncodingInformationStructure ConvertWorldAnalysisEncodingInformation(ETSI.ARF.OpenAPI.WorldAnalysis.EncodingInformationStructure value)
+    {
+        ETSI.ARF.OpenAPI.WorldStorage.EncodingInformationStructure resul = new ETSI.ARF.OpenAPI.WorldStorage.EncodingInformationStructure();
+        resul.DataFormat = (ETSI.ARF.OpenAPI.WorldStorage.EncodingInformationStructureDataFormat)((int)value.DataFormat);
+        resul.Version = value.Version;
+        resul.AdditionalProperties = value.AdditionalProperties; // need copy ?
+        return resul;
+    }
+
 }
 
 namespace ETSI.ARF.OpenAPI.WorldAnalysis
-- 
GitLab