You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@plc4x.apache.org by hu...@apache.org on 2021/03/07 11:39:54 UTC

[plc4x] branch feature/string_enum_mspec updated: Updated C and Go templates

This is an automated email from the ASF dual-hosted git repository.

hutcheb pushed a commit to branch feature/string_enum_mspec
in repository https://gitbox.apache.org/repos/asf/plc4x.git


The following commit(s) were added to refs/heads/feature/string_enum_mspec by this push:
     new 34a3012  Updated C and Go templates
34a3012 is described below

commit 34a3012887ff07715a39c4141228a66804476aa5
Author: hutcheb <be...@gmail.com>
AuthorDate: Sun Mar 7 06:38:29 2021 -0500

    Updated C and Go templates
    
    Still have to confirm Go generated sources ae being compiled to check for some errors.
    Have to rework the java templates as the mspec format changed when implementing C
---
 .../main/resources/templates/c/pojo-template-c.ftlh  |  6 ++----
 .../main/resources/templates/go/model-template.ftlh  | 20 +++++++++++++++++++-
 2 files changed, 21 insertions(+), 5 deletions(-)

diff --git a/build-utils/language-c/src/main/resources/templates/c/pojo-template-c.ftlh b/build-utils/language-c/src/main/resources/templates/c/pojo-template-c.ftlh
index 28624cd..0b0263f 100644
--- a/build-utils/language-c/src/main/resources/templates/c/pojo-template-c.ftlh
+++ b/build-utils/language-c/src/main/resources/templates/c/pojo-template-c.ftlh
@@ -74,14 +74,12 @@
 const ${helper.getCTypeName(type.name)}_discriminator ${helper.getCTypeName(type.name)}_discriminators[] = {
     <#if helper.getDiscriminatorValues()?has_content>
         <#list helper.getDiscriminatorValues() as name, typeValues>
-            // ${name}
-
   {/* ${helper.getCTypeName(name)} */
    <#list typeValues as key, value>
        <#if !helper.isComplexTypeReference(helper.getDiscriminatorTypes()[key])>
-       .${key} = <#if value??>${value}<#else>-1</#if><#sep>,
+    .${key} = <#if value??>${value}<#else>-1</#if><#sep>,
        <#else>
-       .${key} = <#if value??>${helper.getLanguageTypeNameForTypeReference(helper.getDiscriminatorTypes()[key])}_${value}<#else>-1</#if><#sep>,
+    .${key} = <#if value??>${helper.getLanguageTypeNameForTypeReference(helper.getDiscriminatorTypes()[key])}_${value}<#else>-1</#if><#sep>,
        </#if>
    </#list>}<#sep >,
 </#list>
diff --git a/build-utils/language-go/src/main/resources/templates/go/model-template.ftlh b/build-utils/language-go/src/main/resources/templates/go/model-template.ftlh
index d70003a..d750b4a 100644
--- a/build-utils/language-go/src/main/resources/templates/go/model-template.ftlh
+++ b/build-utils/language-go/src/main/resources/templates/go/model-template.ftlh
@@ -240,7 +240,17 @@ func (m *${type.name}) LengthInBits() uint16 {
                 <#assign simpleTypeReference = discriminatorField.type>
 
     // Discriminator Field (${discriminatorField.name})
-    lengthInBits += ${simpleTypeReference.sizeInBits}
+                <#if helper.isSimpleTypeReference(simpleTypeReference)>
+                    <#if helper.getLanguageTypeNameForTypeReference(discriminatorField.type) = "String">
+    lengthInBits += ${simpleTypeReference.getLength()};
+                    <#else>
+    lengthInBits += ${simpleTypeReference.sizeInBits};
+                    </#if>
+                <#elseif helper.isEnumField(discriminatorField)>
+    lengthInBits += ${helper.getEnumBaseTypeReference(discriminatorField.type).sizeInBits};
+                <#else>
+    lengthInBits += ${discriminatorField.name}.getLengthInBits();
+                </#if>
                 <#break>
             <#case "enum">
                 <#assign enumField = field>
@@ -439,7 +449,11 @@ func ${type.name}Parse(io *utils.ReadBuffer<#if type.parserArguments?has_content
                 <#assign simpleTypeReference = discriminatorField.type>
 
     // Discriminator Field (${discriminatorField.name}) (Used as input to a switch field)
+            <#if helper.isEnumField(field)>
+    ${helper.getVariableName(field)}, _${discriminatorField.name}Err := ${helper.getReadBufferReadMethodCall(helper.getEnumBaseTypeReference(discriminatorField.type))}
+            <#else>
     ${helper.getVariableName(field)}, _${discriminatorField.name}Err := ${helper.getReadBufferReadMethodCall(simpleTypeReference)}
+            </#if>
     if _${discriminatorField.name}Err != nil {
         return nil, errors.New("Error parsing '${discriminatorField.name}' field " + _${discriminatorField.name}Err.Error())
     }
@@ -747,7 +761,11 @@ func (m *${type.name}) Serialize(io utils.WriteBuffer<#if helper.getSerializerAr
 
     // Discriminator Field (${discriminatorField.name}) (Used as input to a switch field)
     ${discriminatorField.name} := ${helper.getLanguageTypeNameForField(field)}(child.${discriminatorField.name?cap_first}())
+             <#if helper.isEnumField(field)>
+     _${discriminatorField.name}Err := ${helper.getWriteBufferWriteMethodCall(helper.getEnumBaseTypeReference(discriminatorField.type), "(" + discriminatorField.name + ")")}
+            <#else>
     _${discriminatorField.name}Err := ${helper.getWriteBufferWriteMethodCall(simpleTypeReference, "(" + discriminatorField.name + ")")}
+            </#if>
     if _${discriminatorField.name}Err != nil {
         return errors.New("Error serializing '${discriminatorField.name}' field " + _${discriminatorField.name}Err.Error())
     }