Skip to content

Commit

Permalink
refactor(codegen/plc4go): set arrays to nil if the result in an empty…
Browse files Browse the repository at this point in the history
… one
  • Loading branch information
sruehl committed Jun 22, 2022
1 parent d45cbf3 commit 3f0ae43
Show file tree
Hide file tree
Showing 292 changed files with 2,952 additions and 3,408 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -790,6 +790,10 @@ func ${type.name}Parse(readBuffer utils.ReadBuffer<#if hasParserArguments>, ${pa
<#if field.isCountArrayField()>
// Count array
${arrayField.name} := make(${helper.getLanguageTypeNameForField(field)}, ${helper.toIntegerParseExpression(arrayField, 16, arrayField.loopExpression, parserArguments)})
// This happens when the size is set conditional to 0
if len(${arrayField.name}) == 0 {
${arrayField.name} = nil
}
{
for curItem := uint16(0); curItem < uint16(${helper.toIntegerParseExpression(arrayField, 16, arrayField.loopExpression, parserArguments)}); curItem++ {
<#if (!arrayElementType.isSimpleTypeReference()) && helper.requiresVariable(arrayField, "lastItem")>
Expand Down Expand Up @@ -837,7 +841,7 @@ func ${type.name}Parse(readBuffer utils.ReadBuffer<#if hasParserArguments>, ${pa
<#elseif field.isLengthArrayField()>
<#-- For a length array, we read data till the read position of the buffer reaches a given position -->
// Length array
${arrayField.name} := make(${helper.getLanguageTypeNameForField(field)}, 0)
var ${arrayField.name} ${helper.getLanguageTypeNameForField(field)}
{
_${arrayField.name}Length := ${helper.toIntegerParseExpression(arrayField, 16, arrayField.loopExpression, parserArguments)}
_${arrayField.name}EndPos := positionAware.GetPos() + uint16(_${arrayField.name}Length)
Expand Down Expand Up @@ -885,7 +889,7 @@ func ${type.name}Parse(readBuffer utils.ReadBuffer<#if hasParserArguments>, ${pa
<#-- A terminated array keeps on reading data as long as the termination expression evaluates to false -->
<#elseif field.isTerminatedArrayField()>
// Terminated array
${arrayField.name} := make(${helper.getLanguageTypeNameForField(field)}, 0)
var ${arrayField.name} ${helper.getLanguageTypeNameForField(field)}
{
for ;!bool(${helper.toParseExpression(arrayField, helper.boolTypeReference, arrayField.loopExpression, parserArguments)}); {
<@compress single_line=true>
Expand Down Expand Up @@ -1054,6 +1058,10 @@ func ${type.name}Parse(readBuffer utils.ReadBuffer<#if hasParserArguments>, ${pa
// Count array
_${manualArrayField.name}Count := ${helper.toParseExpression(manualArrayField, helper.intTypeReference, manualArrayField.loopExpression, parserArguments)}
${manualArrayField.name} := make(${helper.getLanguageTypeNameForField(field)}, _${manualArrayField.name}Count)
// This happens when the size is set conditional to 0
if len(${manualArrayField.name}) == 0 {
${manualArrayField.name} = nil
}
for i := 0; i < _${manualArrayField.name}Count; i++ {
${manualArrayField.name}[i] = (${helper.getLanguageTypeNameForField(field)}) (${helper.toParseExpression(manualArrayField, arrayElementType, manualArrayField.parseExpression, parserArguments)})
}
Expand All @@ -1063,7 +1071,7 @@ func ${type.name}Parse(readBuffer utils.ReadBuffer<#if hasParserArguments>, ${pa
<#if field.isLengthArrayField()>
// Length array
_${manualArrayField.name}Length := ${helper.toIntegerParseExpression(manualArrayField, 16, manualArrayField.loopExpression, parserArguments)}
_${manualArrayField.name}List := make(${helper.getLanguageTypeNameForField(manualArrayField)}, 0)
var _${manualArrayField.name}List ${helper.getLanguageTypeNameForField(manualArrayField)}
${manualArrayField.name}EndPos := positionAware.GetPos() + _${manualArrayField.name}Length
for ;positionAware.GetPos() < ${manualArrayField.name}EndPos; {
_${manualArrayField.name}List = append(_${manualArrayField.name}List, ((${helper.getLanguageTypeNameForField(field)}) (${helper.toParseExpression(manualArrayField, arrayElementType, manualArrayField.parseExpression, parserArguments)})))
Expand All @@ -1075,7 +1083,7 @@ func ${type.name}Parse(readBuffer utils.ReadBuffer<#if hasParserArguments>, ${pa
<#-- A terminated array keeps on reading data as long as the termination expression evaluates to false -->
<#elseif field.isTerminatedArrayField()>
// Terminated array
_${manualArrayField.name}List := make(${helper.getLanguageTypeNameForField(manualArrayField)}, 0)
var _${manualArrayField.name}List ${helper.getLanguageTypeNameForField(manualArrayField)}
{
_values := &_${manualArrayField.name}List
_ = _values
Expand All @@ -1096,6 +1104,10 @@ func ${type.name}Parse(readBuffer utils.ReadBuffer<#if hasParserArguments>, ${pa
-->
<#if manualArrayField.type.isSimpleTypeReference()>
${manualArrayField.name} := make(${helper.getLanguageTypeNameForField(field)}, len(_${manualArrayField.name}List))
// This happens when the size is set conditional to 0
if len(${manualArrayField.name}) == 0 {
${manualArrayField.name} = nil
}
for i := 0; i < len(_${manualArrayField.name}List); i++ {
${manualArrayField.name}[i] = ${helper.getLanguageTypeNameForField(field)}(_${manualArrayField.name}List[i])
}
Expand Down Expand Up @@ -1550,44 +1562,41 @@ func (m *_${type.name}) Serialize(writeBuffer utils.WriteBuffer) error {
<#assign arrayElementType = arrayField.type.elementTypeReference>

// Array Field (${arrayField.name})
if m.Get${arrayField.name?cap_first}() != nil {
<#if arrayElementType.isByteBased()>
// Byte Array field (${arrayField.name})
_writeArrayErr := writeBuffer.WriteByteArray("${arrayField.name}", m.Get${arrayField.name?cap_first}())
if _writeArrayErr != nil {
return errors.Wrap(_writeArrayErr, "Error serializing '${arrayField.name}' field")<@emitImport import="github.com/pkg/errors" />
}
// Byte Array field (${arrayField.name})
if err := writeBuffer.WriteByteArray("${arrayField.name}", m.Get${arrayField.name?cap_first}()); err != nil {
return errors.Wrap(err, "Error serializing '${arrayField.name}' field")<@emitImport import="github.com/pkg/errors" />
}
<#else>
if pushErr := writeBuffer.PushContext("${arrayField.name}", utils.WithRenderAsList(true)); pushErr != nil {
return errors.Wrap(pushErr, "Error pushing for ${arrayField.name}")<@emitImport import="github.com/pkg/errors" />
}
if pushErr := writeBuffer.PushContext("${arrayField.name}", utils.WithRenderAsList(true)); pushErr != nil {
return errors.Wrap(pushErr, "Error pushing for ${arrayField.name}")<@emitImport import="github.com/pkg/errors" />
}
<#if arrayElementType.isComplexTypeReference() && (helper.needsVariable(arrayField, "curItem", true) || helper.needsVariable(arrayField, "lastItem", true))>
itemCount := uint16(len(m.Get${arrayField.name?cap_first}()))
var curItem uint16 = 0
itemCount := uint16(len(m.Get${arrayField.name?cap_first}()))
var curItem uint16 = 0
</#if>
for _, _element := range m.Get${arrayField.name?cap_first}() {
for _, _element := range m.Get${arrayField.name?cap_first}() {
<#if arrayElementType.isSimpleTypeReference()>
<#assign simpleTypeReference = arrayElementType.asSimpleTypeReference().orElseThrow()>
_elementErr := ${helper.getWriteBufferWriteMethodCall("", simpleTypeReference, "_element", arrayField)}
_elementErr := ${helper.getWriteBufferWriteMethodCall("", simpleTypeReference, "_element", arrayField)}
<#else>
<#assign complexTypeReference = arrayElementType>
<#if helper.needsVariable(arrayField, "lastItem", true)>
var lastItem bool = curItem == (itemCount - 1)
var lastItem bool = curItem == (itemCount - 1)
</#if>
_elementErr := writeBuffer.WriteSerializable(_element)
</#if>
if _elementErr != nil {
return errors.Wrap(_elementErr, "Error serializing '${arrayField.name}' field")<@emitImport import="github.com/pkg/errors" />
}
<#if helper.needsVariable(arrayField, "curItem", true) || helper.needsVariable(arrayField, "lastItem", true)>
curItem++
_elementErr := writeBuffer.WriteSerializable(_element)
</#if>
if _elementErr != nil {
return errors.Wrap(_elementErr, "Error serializing '${arrayField.name}' field")<@emitImport import="github.com/pkg/errors" />
}
if popErr := writeBuffer.PopContext("${arrayField.name}", utils.WithRenderAsList(true)); popErr != nil {
return errors.Wrap(popErr, "Error popping for ${arrayField.name}")<@emitImport import="github.com/pkg/errors" />
}
<#if helper.needsVariable(arrayField, "curItem", true) || helper.needsVariable(arrayField, "lastItem", true)>
curItem++
</#if>
}
if popErr := writeBuffer.PopContext("${arrayField.name}", utils.WithRenderAsList(true)); popErr != nil {
return errors.Wrap(popErr, "Error popping for ${arrayField.name}")<@emitImport import="github.com/pkg/errors" />
}
</#if>
<#break>
<#case "checksum">
<#assign checksumField = field.asChecksumField().orElseThrow()>
Expand Down Expand Up @@ -1688,17 +1697,15 @@ func (m *_${type.name}) Serialize(writeBuffer utils.WriteBuffer) error {
<#assign arrayElementType = manualArrayField.type.elementTypeReference>

// Manual Array Field (${manualArrayField.name})
if m.Get${manualArrayField.name?cap_first}() != nil {
if pushErr := writeBuffer.PushContext("${manualArrayField.name}", utils.WithRenderAsList(true)); pushErr != nil {
return errors.Wrap(pushErr, "Error pushing for ${manualArrayField.name}")<@emitImport import="github.com/pkg/errors" />
}
for _, m := range m.Get${manualArrayField.name?cap_first}() {
if pushErr := writeBuffer.PushContext("${manualArrayField.name}", utils.WithRenderAsList(true)); pushErr != nil {
return errors.Wrap(pushErr, "Error pushing for ${manualArrayField.name}")<@emitImport import="github.com/pkg/errors" />
}
for _, m := range m.Get${manualArrayField.name?cap_first}() {
<#-- TODO at the moment the implementation below is broken as element get prefixed wrong therefore we substract it with substring-->
${helper.toSerializationExpression(manualArrayField, arrayElementType, manualArrayField.serializeExpression, parserArguments)?replace("m.","")}
}
if popErr := writeBuffer.PopContext("${manualArrayField.name}", utils.WithRenderAsList(true)); popErr != nil {
return errors.Wrap(popErr, "Error popping for ${manualArrayField.name}")<@emitImport import="github.com/pkg/errors" />
}
}
if popErr := writeBuffer.PopContext("${manualArrayField.name}", utils.WithRenderAsList(true)); popErr != nil {
return errors.Wrap(popErr, "Error popping for ${manualArrayField.name}")<@emitImport import="github.com/pkg/errors" />
}
<#break>
<#case "manual">
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@
<xml>
<CIPEncapsulationPacket>
<commandType dataType="uint" bitLength="16">257</commandType>
<len dataType="uint" bitLength="16">0</len>
<packetLen dataType="uint" bitLength="16">0</packetLen>
<sessionHandle dataType="uint" bitLength="32">0</sessionHandle>
<status dataType="uint" bitLength="32">0</status>
<senderContext isList="true">
Expand Down Expand Up @@ -60,7 +60,7 @@
<xml>
<CIPEncapsulationPacket>
<commandType dataType="uint" bitLength="16">513</commandType>
<len dataType="uint" bitLength="16">0</len>
<packetLen dataType="uint" bitLength="16">0</packetLen>
<sessionHandle dataType="uint" bitLength="32">818</sessionHandle>
<status dataType="uint" bitLength="32">0</status>
<senderContext isList="true">
Expand Down Expand Up @@ -88,7 +88,7 @@
<xml>
<CIPEncapsulationPacket>
<commandType dataType="uint" bitLength="16">263</commandType>
<len dataType="uint" bitLength="16">14</len>
<packetLen dataType="uint" bitLength="16">14</packetLen>
<sessionHandle dataType="uint" bitLength="32">818</sessionHandle>
<status dataType="uint" bitLength="32">0</status>
<senderContext isList="true">
Expand Down Expand Up @@ -140,7 +140,7 @@
<xml>
<CIPEncapsulationPacket>
<commandType dataType="uint" bitLength="16">519</commandType>
<len dataType="uint" bitLength="16">32</len>
<packetLen dataType="uint" bitLength="16">32</packetLen>
<sessionHandle dataType="uint" bitLength="32">818</sessionHandle>
<status dataType="uint" bitLength="32">0</status>
<senderContext isList="true">
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@
<xml>
<EipPacket>
<command dataType="uint" bitLength="16">101</command>
<len dataType="uint" bitLength="16">4</len>
<packetLength dataType="uint" bitLength="16">4</packetLength>
<sessionHandle dataType="uint" bitLength="32">0</sessionHandle>
<status dataType="uint" bitLength="32">0</status>
<senderContext isList="true">
Expand Down Expand Up @@ -63,7 +63,7 @@
<xml>
<EipPacket>
<command dataType="uint" bitLength="16">111</command>
<len dataType="uint" bitLength="16">40</len>
<packetLength dataType="uint" bitLength="16">40</packetLength>
<sessionHandle dataType="uint" bitLength="32">4660</sessionHandle>
<status dataType="uint" bitLength="32">0</status>
<senderContext isList="true">
Expand Down Expand Up @@ -127,7 +127,7 @@
<xml>
<EipPacket>
<command dataType="uint" bitLength="16">111</command>
<len dataType="uint" bitLength="16">26</len>
<packetLength dataType="uint" bitLength="16">26</packetLength>
<sessionHandle dataType="uint" bitLength="32">4660</sessionHandle>
<status dataType="uint" bitLength="32">0</status>
<senderContext isList="true">
Expand Down Expand Up @@ -157,10 +157,10 @@
<reserved dataType="uint" bitLength="8">0</reserved>
<status dataType="uint" bitLength="8">0</status>
<extStatus dataType="uint" bitLength="8">0</extStatus>
<dataType> <!--0xC4-->
<dataType>
<CIPDataTypeCode dataType="uint" bitLength="16" stringRepresentation="DINT">196</CIPDataTypeCode>
</dataType>
<data dataType="byte" bitLength="32">0x00000216</data> <!--0x216 but again issue when parsing Object to XML-->
<data dataType="byte" bitLength="32">0x00000216</data>
</CipReadResponse>
</CipService>
</service>
Expand All @@ -180,7 +180,7 @@
<xml>
<EipPacket>
<command dataType="uint" bitLength="16">111</command>
<len dataType="uint" bitLength="16">52</len>
<packetLength dataType="uint" bitLength="16">52</packetLength>
<sessionHandle dataType="uint" bitLength="32">4660</sessionHandle>
<status dataType="uint" bitLength="32">0</status>
<senderContext isList="true">
Expand Down Expand Up @@ -248,7 +248,7 @@
<xml>
<EipPacket>
<command dataType="uint" bitLength="16">111</command>
<len dataType="uint" bitLength="16">20</len>
<packetLength dataType="uint" bitLength="16">20</packetLength>
<sessionHandle dataType="uint" bitLength="32">4660</sessionHandle>
<status dataType="uint" bitLength="32">0</status>
<senderContext isList="true">
Expand Down
50 changes: 26 additions & 24 deletions plc4go/protocols/abeth/readwrite/model/CIPEncapsulationPacket.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading

0 comments on commit 3f0ae43

Please sign in to comment.