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

sruehl pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/plc4x.git


The following commit(s) were added to refs/heads/develop by this push:
     new 6deb18d  plc4go: push arrays and padding into own context
6deb18d is described below

commit 6deb18d3d472992e3efb68177d111d4d40c5c8da
Author: Sebastian Rühl <[email protected]>
AuthorDate: Mon Apr 19 09:40:57 2021 +0200

    plc4go: push arrays and padding into own context
    
    + fixed bug in AlignBoxes on empty arrays
    + simplified WriterBufferBoxBased.go
---
 .../resources/templates/go/model-template.go.ftlh  |  6 +-
 go.mod                                             |  2 +-
 go.sum                                             |  2 +
 .../model/AdsDeviceNotificationRequest.go          |  2 +
 .../ads/readwrite/model/AdsNotificationSample.go   |  2 +
 .../readwrite/model/AdsReadDeviceInfoResponse.go   |  2 +
 .../plc4go/ads/readwrite/model/AdsReadResponse.go  |  2 +
 .../ads/readwrite/model/AdsReadWriteRequest.go     |  4 +
 .../ads/readwrite/model/AdsReadWriteResponse.go    |  2 +
 .../plc4go/ads/readwrite/model/AdsStampHeader.go   |  2 +
 .../ads/readwrite/model/AdsWriteControlRequest.go  |  2 +
 .../plc4go/ads/readwrite/model/AdsWriteRequest.go  |  2 +
 .../bacnetip/readwrite/model/BACnetAddress.go      |  2 +
 ...firmedServiceRequestConfirmedCOVNotification.go |  4 +
 .../BACnetConfirmedServiceRequestReadProperty.go   |  2 +
 .../BACnetConfirmedServiceRequestSubscribeCOV.go   |  2 +
 .../BACnetConfirmedServiceRequestWriteProperty.go  |  2 +
 .../readwrite/model/BACnetErrorReadProperty.go     |  4 +
 .../model/BACnetServiceAckReadProperty.go          |  2 +
 .../model/BACnetTagApplicationBitString.go         |  2 +
 .../model/BACnetTagApplicationEnumerated.go        |  2 +
 .../model/BACnetTagApplicationSignedInteger.go     |  2 +
 .../model/BACnetTagApplicationUnsignedInteger.go   |  2 +
 .../bacnetip/readwrite/model/BACnetTagContext.go   |  2 +
 .../readwrite/model/BACnetTagWithContent.go        |  2 +
 .../model/BACnetUnconfirmedServiceRequestIAm.go    |  2 +
 ...rmedServiceRequestUnconfirmedPrivateTransfer.go |  2 +
 .../model/BACnetUnconfirmedServiceRequestWhoHas.go |  2 +
 .../model/BACnetUnconfirmedServiceRequestWhoIs.go  |  4 +
 .../bacnetip/readwrite/model/BVLCForwardedNPDU.go  |  2 +
 .../readwrite/model/NLMIAmRouterToNetwork.go       |  2 +
 .../readwrite/model/NLMWhoIsRouterToNetwork.go     |  2 +
 .../plc4go/bacnetip/readwrite/model/NPDU.go        |  4 +
 .../model/ApduDataDeviceDescriptorResponse.go      |  2 +
 .../readwrite/model/ApduDataExtAuthorizeRequest.go |  2 +
 .../model/ApduDataExtPropertyValueResponse.go      |  2 +
 .../model/ApduDataExtPropertyValueWrite.go         |  2 +
 .../readwrite/model/ApduDataGroupValueResponse.go  |  2 +
 .../readwrite/model/ApduDataGroupValueWrite.go     |  2 +
 .../readwrite/model/ApduDataMemoryResponse.go      |  2 +
 .../model/ComObjectTableRealisationType1.go        |  2 +
 .../model/ComObjectTableRealisationType2.go        |  2 +
 .../knxnetip/readwrite/model/DIBDeviceInfo.go      |  4 +
 .../knxnetip/readwrite/model/DIBSuppSvcFamilies.go |  2 +
 .../plc4go/knxnetip/readwrite/model/IPAddress.go   |  2 +
 .../plc4go/knxnetip/readwrite/model/LBusmonInd.go  |  2 +
 .../plc4go/knxnetip/readwrite/model/LDataCon.go    |  2 +
 .../knxnetip/readwrite/model/LDataExtended.go      |  2 +
 .../plc4go/knxnetip/readwrite/model/LDataInd.go    |  2 +
 .../plc4go/knxnetip/readwrite/model/LDataReq.go    |  2 +
 .../plc4go/knxnetip/readwrite/model/LPollData.go   |  2 +
 .../plc4go/knxnetip/readwrite/model/MACAddress.go  |  2 +
 .../knxnetip/readwrite/model/UnknownMessage.go     |  2 +
 .../model/ModbusPDUGetComEventLogResponse.go       |  2 +
 .../readwrite/model/ModbusPDUReadCoilsResponse.go  |  2 +
 .../model/ModbusPDUReadDiscreteInputsResponse.go   |  2 +
 .../model/ModbusPDUReadFifoQueueResponse.go        |  2 +
 .../model/ModbusPDUReadFileRecordRequest.go        |  2 +
 .../model/ModbusPDUReadFileRecordResponse.go       |  2 +
 .../model/ModbusPDUReadFileRecordResponseItem.go   |  2 +
 .../model/ModbusPDUReadHoldingRegistersResponse.go |  2 +
 .../model/ModbusPDUReadInputRegistersResponse.go   |  2 +
 ...sPDUReadWriteMultipleHoldingRegistersRequest.go |  2 +
 ...PDUReadWriteMultipleHoldingRegistersResponse.go |  2 +
 .../model/ModbusPDUReportServerIdResponse.go       |  2 +
 .../model/ModbusPDUWriteFileRecordRequest.go       |  2 +
 .../model/ModbusPDUWriteFileRecordRequestItem.go   |  2 +
 .../model/ModbusPDUWriteFileRecordResponse.go      |  2 +
 .../model/ModbusPDUWriteFileRecordResponseItem.go  |  2 +
 .../model/ModbusPDUWriteMultipleCoilsRequest.go    |  2 +
 ...odbusPDUWriteMultipleHoldingRegistersRequest.go |  2 +
 .../plc4go/s7/readwrite/model/COTPPacket.go        |  2 +
 ...COTPParameterDisconnectAdditionalInformation.go |  2 +
 .../readwrite/model/S7ParameterReadVarRequest.go   |  2 +
 .../s7/readwrite/model/S7ParameterUserData.go      |  2 +
 .../readwrite/model/S7ParameterWriteVarRequest.go  |  2 +
 .../s7/readwrite/model/S7PayloadReadVarResponse.go |  2 +
 .../plc4go/s7/readwrite/model/S7PayloadUserData.go |  2 +
 ...ayloadUserDataItemCpuFunctionReadSzlResponse.go |  2 +
 .../s7/readwrite/model/S7PayloadWriteVarRequest.go |  2 +
 .../readwrite/model/S7PayloadWriteVarResponse.go   |  2 +
 .../s7/readwrite/model/S7VarPayloadDataItem.go     |  6 +-
 .../plc4go/s7/readwrite/model/SzlDataTreeItem.go   |  2 +
 plc4go/internal/plc4go/s7/s7Io_test.go             | 67 +++++++++++++---
 .../plc4go/spi/utils/WriteBufferBoxBased.go        | 92 ++++++----------------
 plc4go/internal/plc4go/spi/utils/asciiBox.go       |  2 +-
 86 files changed, 262 insertions(+), 85 deletions(-)

diff --git 
a/build-utils/language-go/src/main/resources/templates/go/model-template.go.ftlh
 
b/build-utils/language-go/src/main/resources/templates/go/model-template.go.ftlh
index a16fbce..30de2a4 100644
--- 
a/build-utils/language-go/src/main/resources/templates/go/model-template.go.ftlh
+++ 
b/build-utils/language-go/src/main/resources/templates/go/model-template.go.ftlh
@@ -919,6 +919,7 @@ func (m *${type.name}) Serialize(io utils.WriteBuffer<#if 
helper.getSerializerAr
 
        // Array Field (${arrayField.name})
        if m.${arrayField.name?cap_first} != nil {
+               io.PushContext("${arrayField.name}")
                                <#if 
helper.isComplexTypeReference(arrayField.type) && 
(helper.needsVariable(arrayField, "curItem", true) || 
helper.needsVariable(arrayField, "lastItem", true))>
                itemCount := uint16(len(m.${arrayField.name?cap_first}))
                var curItem uint16 = 0
@@ -941,6 +942,7 @@ func (m *${type.name}) Serialize(io utils.WriteBuffer<#if 
helper.getSerializerAr
                        curItem++
                                </#if>
                }
+               io.PopContext("${arrayField.name}")
        }
                                <#break>
                        <#case "checksum">
@@ -1057,14 +1059,16 @@ func (m *${type.name}) Serialize(io 
utils.WriteBuffer<#if helper.getSerializerAr
 
        // Padding Field (padding)
        {
+               io.PushContext("padding")
                _timesPadding := 
uint8(${helper.toSerializationExpression(paddingField, 
paddingField.paddingCondition, type.parserArguments)})
                for ;_timesPadding > 0; _timesPadding-- {
                        _paddingValue := 
${helper.getLanguageTypeNameForField(field)}(${helper.toSerializationExpression(paddingField,
 paddingField.paddingValue, type.parserArguments)})
-                       _paddingErr := 
${helper.getWriteBufferWriteMethodCall("padding", simpleTypeReference, 
"(_paddingValue)", field)}
+                       _paddingErr := 
${helper.getWriteBufferWriteMethodCall("", simpleTypeReference, 
"(_paddingValue)", field)}
                        if _paddingErr != nil {
                                return errors.Wrap(_paddingErr, "Error 
serializing 'padding' field")<@emitImport import="github.com/pkg/errors" />
                        }
                }
+               io.PopContext("padding")
        }
                                <#break>
                        <#case "reserved">
diff --git a/go.mod b/go.mod
index f9867fb..4b9be64 100644
--- a/go.mod
+++ b/go.mod
@@ -21,6 +21,6 @@ module github.com/apache/plc4x
 go 1.15
 
 require (
-       github.com/apache/plc4x/plc4go v0.0.0-20210418200404-fc1c1b76ee32 // 
indirect
+       github.com/apache/plc4x/plc4go v0.0.0-20210418221506-2292848a04fe // 
indirect
        github.com/sirupsen/logrus v1.7.0 // indirect
 )
diff --git a/go.sum b/go.sum
index cab7ee0..086eeb2 100644
--- a/go.sum
+++ b/go.sum
@@ -84,6 +84,8 @@ github.com/apache/plc4x/plc4go 
v0.0.0-20210418111735-cae55bd06f0b h1:XkRSbAT/Dew
 github.com/apache/plc4x/plc4go v0.0.0-20210418111735-cae55bd06f0b/go.mod 
h1:NfO8uGKPGwDxn1GqOb4oNhAtPF7St1A9LRk1J/qSlWU=
 github.com/apache/plc4x/plc4go v0.0.0-20210418200404-fc1c1b76ee32 
h1:jsUKZHIEse38lF24cY57HepG9bF4YRasZ7ctuvlJ+7k=
 github.com/apache/plc4x/plc4go v0.0.0-20210418200404-fc1c1b76ee32/go.mod 
h1:d7O6kgWHhwFxXbMbl1DSu55qCYcQz9uwjdsSSJOEA/4=
+github.com/apache/plc4x/plc4go v0.0.0-20210418221506-2292848a04fe 
h1:paOfmjd5VH3e+sqZBboWchU+pZk2qDWLKdrXBUiv2D8=
+github.com/apache/plc4x/plc4go v0.0.0-20210418221506-2292848a04fe/go.mod 
h1:d7O6kgWHhwFxXbMbl1DSu55qCYcQz9uwjdsSSJOEA/4=
 github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod 
h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4=
 github.com/davecgh/go-spew v1.1.1/go.mod 
h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
 github.com/dnephin/pflag v1.0.7/go.mod 
h1:uxE91IoWURlOiTUIA8Mq5ZZkAv3dPUfZNaT80Zm7OQE=
diff --git 
a/plc4go/internal/plc4go/ads/readwrite/model/AdsDeviceNotificationRequest.go 
b/plc4go/internal/plc4go/ads/readwrite/model/AdsDeviceNotificationRequest.go
index 3048183..b17ea85 100644
--- a/plc4go/internal/plc4go/ads/readwrite/model/AdsDeviceNotificationRequest.go
+++ b/plc4go/internal/plc4go/ads/readwrite/model/AdsDeviceNotificationRequest.go
@@ -177,12 +177,14 @@ func (m *AdsDeviceNotificationRequest) Serialize(io 
utils.WriteBuffer) error {
 
                // Array Field (adsStampHeaders)
                if m.AdsStampHeaders != nil {
+                       io.PushContext("adsStampHeaders")
                        for _, _element := range m.AdsStampHeaders {
                                _elementErr := _element.Serialize(io)
                                if _elementErr != nil {
                                        return errors.Wrap(_elementErr, "Error 
serializing 'adsStampHeaders' field")
                                }
                        }
+                       io.PopContext("adsStampHeaders")
                }
 
                io.PopContext("AdsDeviceNotificationRequest")
diff --git 
a/plc4go/internal/plc4go/ads/readwrite/model/AdsNotificationSample.go 
b/plc4go/internal/plc4go/ads/readwrite/model/AdsNotificationSample.go
index 0953761..9f6731a 100644
--- a/plc4go/internal/plc4go/ads/readwrite/model/AdsNotificationSample.go
+++ b/plc4go/internal/plc4go/ads/readwrite/model/AdsNotificationSample.go
@@ -140,12 +140,14 @@ func (m *AdsNotificationSample) Serialize(io 
utils.WriteBuffer) error {
 
        // Array Field (data)
        if m.Data != nil {
+               io.PushContext("data")
                for _, _element := range m.Data {
                        _elementErr := io.WriteInt8("", 8, _element)
                        if _elementErr != nil {
                                return errors.Wrap(_elementErr, "Error 
serializing 'data' field")
                        }
                }
+               io.PopContext("data")
        }
 
        io.PopContext("AdsNotificationSample")
diff --git 
a/plc4go/internal/plc4go/ads/readwrite/model/AdsReadDeviceInfoResponse.go 
b/plc4go/internal/plc4go/ads/readwrite/model/AdsReadDeviceInfoResponse.go
index 0f6f658..3bd50cf 100644
--- a/plc4go/internal/plc4go/ads/readwrite/model/AdsReadDeviceInfoResponse.go
+++ b/plc4go/internal/plc4go/ads/readwrite/model/AdsReadDeviceInfoResponse.go
@@ -213,12 +213,14 @@ func (m *AdsReadDeviceInfoResponse) Serialize(io 
utils.WriteBuffer) error {
 
                // Array Field (device)
                if m.Device != nil {
+                       io.PushContext("device")
                        for _, _element := range m.Device {
                                _elementErr := io.WriteInt8("", 8, _element)
                                if _elementErr != nil {
                                        return errors.Wrap(_elementErr, "Error 
serializing 'device' field")
                                }
                        }
+                       io.PopContext("device")
                }
 
                io.PopContext("AdsReadDeviceInfoResponse")
diff --git a/plc4go/internal/plc4go/ads/readwrite/model/AdsReadResponse.go 
b/plc4go/internal/plc4go/ads/readwrite/model/AdsReadResponse.go
index fa5512f..f0eea99 100644
--- a/plc4go/internal/plc4go/ads/readwrite/model/AdsReadResponse.go
+++ b/plc4go/internal/plc4go/ads/readwrite/model/AdsReadResponse.go
@@ -173,12 +173,14 @@ func (m *AdsReadResponse) Serialize(io utils.WriteBuffer) 
error {
 
                // Array Field (data)
                if m.Data != nil {
+                       io.PushContext("data")
                        for _, _element := range m.Data {
                                _elementErr := io.WriteInt8("", 8, _element)
                                if _elementErr != nil {
                                        return errors.Wrap(_elementErr, "Error 
serializing 'data' field")
                                }
                        }
+                       io.PopContext("data")
                }
 
                io.PopContext("AdsReadResponse")
diff --git a/plc4go/internal/plc4go/ads/readwrite/model/AdsReadWriteRequest.go 
b/plc4go/internal/plc4go/ads/readwrite/model/AdsReadWriteRequest.go
index 47477f8..806716e 100644
--- a/plc4go/internal/plc4go/ads/readwrite/model/AdsReadWriteRequest.go
+++ b/plc4go/internal/plc4go/ads/readwrite/model/AdsReadWriteRequest.go
@@ -234,22 +234,26 @@ func (m *AdsReadWriteRequest) Serialize(io 
utils.WriteBuffer) error {
 
                // Array Field (items)
                if m.Items != nil {
+                       io.PushContext("items")
                        for _, _element := range m.Items {
                                _elementErr := _element.Serialize(io)
                                if _elementErr != nil {
                                        return errors.Wrap(_elementErr, "Error 
serializing 'items' field")
                                }
                        }
+                       io.PopContext("items")
                }
 
                // Array Field (data)
                if m.Data != nil {
+                       io.PushContext("data")
                        for _, _element := range m.Data {
                                _elementErr := io.WriteInt8("", 8, _element)
                                if _elementErr != nil {
                                        return errors.Wrap(_elementErr, "Error 
serializing 'data' field")
                                }
                        }
+                       io.PopContext("data")
                }
 
                io.PopContext("AdsReadWriteRequest")
diff --git a/plc4go/internal/plc4go/ads/readwrite/model/AdsReadWriteResponse.go 
b/plc4go/internal/plc4go/ads/readwrite/model/AdsReadWriteResponse.go
index 472a0b0..ce45e9c 100644
--- a/plc4go/internal/plc4go/ads/readwrite/model/AdsReadWriteResponse.go
+++ b/plc4go/internal/plc4go/ads/readwrite/model/AdsReadWriteResponse.go
@@ -173,12 +173,14 @@ func (m *AdsReadWriteResponse) Serialize(io 
utils.WriteBuffer) error {
 
                // Array Field (data)
                if m.Data != nil {
+                       io.PushContext("data")
                        for _, _element := range m.Data {
                                _elementErr := io.WriteInt8("", 8, _element)
                                if _elementErr != nil {
                                        return errors.Wrap(_elementErr, "Error 
serializing 'data' field")
                                }
                        }
+                       io.PopContext("data")
                }
 
                io.PopContext("AdsReadWriteResponse")
diff --git a/plc4go/internal/plc4go/ads/readwrite/model/AdsStampHeader.go 
b/plc4go/internal/plc4go/ads/readwrite/model/AdsStampHeader.go
index 8b938ca..ee5f712 100644
--- a/plc4go/internal/plc4go/ads/readwrite/model/AdsStampHeader.go
+++ b/plc4go/internal/plc4go/ads/readwrite/model/AdsStampHeader.go
@@ -141,12 +141,14 @@ func (m *AdsStampHeader) Serialize(io utils.WriteBuffer) 
error {
 
        // Array Field (adsNotificationSamples)
        if m.AdsNotificationSamples != nil {
+               io.PushContext("adsNotificationSamples")
                for _, _element := range m.AdsNotificationSamples {
                        _elementErr := _element.Serialize(io)
                        if _elementErr != nil {
                                return errors.Wrap(_elementErr, "Error 
serializing 'adsNotificationSamples' field")
                        }
                }
+               io.PopContext("adsNotificationSamples")
        }
 
        io.PopContext("AdsStampHeader")
diff --git 
a/plc4go/internal/plc4go/ads/readwrite/model/AdsWriteControlRequest.go 
b/plc4go/internal/plc4go/ads/readwrite/model/AdsWriteControlRequest.go
index 00cad43..3f1129b 100644
--- a/plc4go/internal/plc4go/ads/readwrite/model/AdsWriteControlRequest.go
+++ b/plc4go/internal/plc4go/ads/readwrite/model/AdsWriteControlRequest.go
@@ -193,12 +193,14 @@ func (m *AdsWriteControlRequest) Serialize(io 
utils.WriteBuffer) error {
 
                // Array Field (data)
                if m.Data != nil {
+                       io.PushContext("data")
                        for _, _element := range m.Data {
                                _elementErr := io.WriteInt8("", 8, _element)
                                if _elementErr != nil {
                                        return errors.Wrap(_elementErr, "Error 
serializing 'data' field")
                                }
                        }
+                       io.PopContext("data")
                }
 
                io.PopContext("AdsWriteControlRequest")
diff --git a/plc4go/internal/plc4go/ads/readwrite/model/AdsWriteRequest.go 
b/plc4go/internal/plc4go/ads/readwrite/model/AdsWriteRequest.go
index d6c6c24..a6893c1 100644
--- a/plc4go/internal/plc4go/ads/readwrite/model/AdsWriteRequest.go
+++ b/plc4go/internal/plc4go/ads/readwrite/model/AdsWriteRequest.go
@@ -193,12 +193,14 @@ func (m *AdsWriteRequest) Serialize(io utils.WriteBuffer) 
error {
 
                // Array Field (data)
                if m.Data != nil {
+                       io.PushContext("data")
                        for _, _element := range m.Data {
                                _elementErr := io.WriteInt8("", 8, _element)
                                if _elementErr != nil {
                                        return errors.Wrap(_elementErr, "Error 
serializing 'data' field")
                                }
                        }
+                       io.PopContext("data")
                }
 
                io.PopContext("AdsWriteRequest")
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetAddress.go 
b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetAddress.go
index 8909bc1..9c1b808 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetAddress.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetAddress.go
@@ -114,12 +114,14 @@ func (m *BACnetAddress) Serialize(io utils.WriteBuffer) 
error {
 
        // Array Field (address)
        if m.Address != nil {
+               io.PushContext("address")
                for _, _element := range m.Address {
                        _elementErr := io.WriteUint8("", 8, _element)
                        if _elementErr != nil {
                                return errors.Wrap(_elementErr, "Error 
serializing 'address' field")
                        }
                }
+               io.PopContext("address")
        }
 
        // Simple Field (port)
diff --git 
a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestConfirmedCOVNotification.go
 
b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestConfirmedCOVNotification.go
index b533907..5c2192e 100644
--- 
a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestConfirmedCOVNotification.go
+++ 
b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestConfirmedCOVNotification.go
@@ -376,12 +376,14 @@ func (m 
*BACnetConfirmedServiceRequestConfirmedCOVNotification) Serialize(io uti
 
                // Array Field (lifetimeSeconds)
                if m.LifetimeSeconds != nil {
+                       io.PushContext("lifetimeSeconds")
                        for _, _element := range m.LifetimeSeconds {
                                _elementErr := io.WriteInt8("", 8, _element)
                                if _elementErr != nil {
                                        return errors.Wrap(_elementErr, "Error 
serializing 'lifetimeSeconds' field")
                                }
                        }
+                       io.PopContext("lifetimeSeconds")
                }
 
                // Const Field (listOfValuesOpeningTag)
@@ -392,12 +394,14 @@ func (m 
*BACnetConfirmedServiceRequestConfirmedCOVNotification) Serialize(io uti
 
                // Array Field (notifications)
                if m.Notifications != nil {
+                       io.PushContext("notifications")
                        for _, _element := range m.Notifications {
                                _elementErr := _element.Serialize(io)
                                if _elementErr != nil {
                                        return errors.Wrap(_elementErr, "Error 
serializing 'notifications' field")
                                }
                        }
+                       io.PopContext("notifications")
                }
 
                // Const Field (listOfValuesClosingTag)
diff --git 
a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestReadProperty.go
 
b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestReadProperty.go
index 260702a..acd74a3 100644
--- 
a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestReadProperty.go
+++ 
b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestReadProperty.go
@@ -232,12 +232,14 @@ func (m *BACnetConfirmedServiceRequestReadProperty) 
Serialize(io utils.WriteBuff
 
                // Array Field (propertyIdentifier)
                if m.PropertyIdentifier != nil {
+                       io.PushContext("propertyIdentifier")
                        for _, _element := range m.PropertyIdentifier {
                                _elementErr := io.WriteInt8("", 8, _element)
                                if _elementErr != nil {
                                        return errors.Wrap(_elementErr, "Error 
serializing 'propertyIdentifier' field")
                                }
                        }
+                       io.PopContext("propertyIdentifier")
                }
 
                io.PopContext("BACnetConfirmedServiceRequestReadProperty")
diff --git 
a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestSubscribeCOV.go
 
b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestSubscribeCOV.go
index 99fc769..fded12e 100644
--- 
a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestSubscribeCOV.go
+++ 
b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestSubscribeCOV.go
@@ -327,12 +327,14 @@ func (m *BACnetConfirmedServiceRequestSubscribeCOV) 
Serialize(io utils.WriteBuff
 
                // Array Field (lifetimeSeconds)
                if m.LifetimeSeconds != nil {
+                       io.PushContext("lifetimeSeconds")
                        for _, _element := range m.LifetimeSeconds {
                                _elementErr := io.WriteInt8("", 8, _element)
                                if _elementErr != nil {
                                        return errors.Wrap(_elementErr, "Error 
serializing 'lifetimeSeconds' field")
                                }
                        }
+                       io.PopContext("lifetimeSeconds")
                }
 
                io.PopContext("BACnetConfirmedServiceRequestSubscribeCOV")
diff --git 
a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestWriteProperty.go
 
b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestWriteProperty.go
index 6d6826f..da16f0d 100644
--- 
a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestWriteProperty.go
+++ 
b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConfirmedServiceRequestWriteProperty.go
@@ -291,12 +291,14 @@ func (m *BACnetConfirmedServiceRequestWriteProperty) 
Serialize(io utils.WriteBuf
 
                // Array Field (propertyIdentifier)
                if m.PropertyIdentifier != nil {
+                       io.PushContext("propertyIdentifier")
                        for _, _element := range m.PropertyIdentifier {
                                _elementErr := io.WriteInt8("", 8, _element)
                                if _elementErr != nil {
                                        return errors.Wrap(_elementErr, "Error 
serializing 'propertyIdentifier' field")
                                }
                        }
+                       io.PopContext("propertyIdentifier")
                }
 
                // Const Field (openingTag)
diff --git 
a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorReadProperty.go 
b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorReadProperty.go
index 6b1f413..038ba26 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorReadProperty.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetErrorReadProperty.go
@@ -219,12 +219,14 @@ func (m *BACnetErrorReadProperty) Serialize(io 
utils.WriteBuffer) error {
 
                // Array Field (errorClass)
                if m.ErrorClass != nil {
+                       io.PushContext("errorClass")
                        for _, _element := range m.ErrorClass {
                                _elementErr := io.WriteInt8("", 8, _element)
                                if _elementErr != nil {
                                        return errors.Wrap(_elementErr, "Error 
serializing 'errorClass' field")
                                }
                        }
+                       io.PopContext("errorClass")
                }
 
                // Const Field (errorCodeHeader)
@@ -242,12 +244,14 @@ func (m *BACnetErrorReadProperty) Serialize(io 
utils.WriteBuffer) error {
 
                // Array Field (errorCode)
                if m.ErrorCode != nil {
+                       io.PushContext("errorCode")
                        for _, _element := range m.ErrorCode {
                                _elementErr := io.WriteInt8("", 8, _element)
                                if _elementErr != nil {
                                        return errors.Wrap(_elementErr, "Error 
serializing 'errorCode' field")
                                }
                        }
+                       io.PopContext("errorCode")
                }
 
                io.PopContext("BACnetErrorReadProperty")
diff --git 
a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckReadProperty.go
 
b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckReadProperty.go
index 69c6143..caea92c 100644
--- 
a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckReadProperty.go
+++ 
b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetServiceAckReadProperty.go
@@ -270,12 +270,14 @@ func (m *BACnetServiceAckReadProperty) Serialize(io 
utils.WriteBuffer) error {
 
                // Array Field (propertyIdentifier)
                if m.PropertyIdentifier != nil {
+                       io.PushContext("propertyIdentifier")
                        for _, _element := range m.PropertyIdentifier {
                                _elementErr := io.WriteInt8("", 8, _element)
                                if _elementErr != nil {
                                        return errors.Wrap(_elementErr, "Error 
serializing 'propertyIdentifier' field")
                                }
                        }
+                       io.PopContext("propertyIdentifier")
                }
 
                // Const Field (openingTag)
diff --git 
a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationBitString.go
 
b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationBitString.go
index f9a601e..a659ecb 100644
--- 
a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationBitString.go
+++ 
b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationBitString.go
@@ -159,12 +159,14 @@ func (m *BACnetTagApplicationBitString) Serialize(io 
utils.WriteBuffer) error {
 
                // Array Field (data)
                if m.Data != nil {
+                       io.PushContext("data")
                        for _, _element := range m.Data {
                                _elementErr := io.WriteInt8("", 8, _element)
                                if _elementErr != nil {
                                        return errors.Wrap(_elementErr, "Error 
serializing 'data' field")
                                }
                        }
+                       io.PopContext("data")
                }
 
                io.PopContext("BACnetTagApplicationBitString")
diff --git 
a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationEnumerated.go
 
b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationEnumerated.go
index 9d216ef..053bb4c 100644
--- 
a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationEnumerated.go
+++ 
b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationEnumerated.go
@@ -140,12 +140,14 @@ func (m *BACnetTagApplicationEnumerated) Serialize(io 
utils.WriteBuffer) error {
 
                // Array Field (data)
                if m.Data != nil {
+                       io.PushContext("data")
                        for _, _element := range m.Data {
                                _elementErr := io.WriteInt8("", 8, _element)
                                if _elementErr != nil {
                                        return errors.Wrap(_elementErr, "Error 
serializing 'data' field")
                                }
                        }
+                       io.PopContext("data")
                }
 
                io.PopContext("BACnetTagApplicationEnumerated")
diff --git 
a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationSignedInteger.go
 
b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationSignedInteger.go
index db281ac..105eded 100644
--- 
a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationSignedInteger.go
+++ 
b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationSignedInteger.go
@@ -140,12 +140,14 @@ func (m *BACnetTagApplicationSignedInteger) Serialize(io 
utils.WriteBuffer) erro
 
                // Array Field (data)
                if m.Data != nil {
+                       io.PushContext("data")
                        for _, _element := range m.Data {
                                _elementErr := io.WriteInt8("", 8, _element)
                                if _elementErr != nil {
                                        return errors.Wrap(_elementErr, "Error 
serializing 'data' field")
                                }
                        }
+                       io.PopContext("data")
                }
 
                io.PopContext("BACnetTagApplicationSignedInteger")
diff --git 
a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationUnsignedInteger.go
 
b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationUnsignedInteger.go
index 2964e6c..f9e7662 100644
--- 
a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationUnsignedInteger.go
+++ 
b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagApplicationUnsignedInteger.go
@@ -140,12 +140,14 @@ func (m *BACnetTagApplicationUnsignedInteger) 
Serialize(io utils.WriteBuffer) er
 
                // Array Field (data)
                if m.Data != nil {
+                       io.PushContext("data")
                        for _, _element := range m.Data {
                                _elementErr := io.WriteInt8("", 8, _element)
                                if _elementErr != nil {
                                        return errors.Wrap(_elementErr, "Error 
serializing 'data' field")
                                }
                        }
+                       io.PopContext("data")
                }
 
                io.PopContext("BACnetTagApplicationUnsignedInteger")
diff --git 
a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagContext.go 
b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagContext.go
index 6b7aa1f..a8df628 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagContext.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagContext.go
@@ -140,12 +140,14 @@ func (m *BACnetTagContext) Serialize(io 
utils.WriteBuffer) error {
 
                // Array Field (data)
                if m.Data != nil {
+                       io.PushContext("data")
                        for _, _element := range m.Data {
                                _elementErr := io.WriteInt8("", 8, _element)
                                if _elementErr != nil {
                                        return errors.Wrap(_elementErr, "Error 
serializing 'data' field")
                                }
                        }
+                       io.PopContext("data")
                }
 
                io.PopContext("BACnetTagContext")
diff --git 
a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagWithContent.go 
b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagWithContent.go
index dc2f5a5..272a769 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagWithContent.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetTagWithContent.go
@@ -249,12 +249,14 @@ func (m *BACnetTagWithContent) Serialize(io 
utils.WriteBuffer) error {
 
        // Array Field (propertyIdentifier)
        if m.PropertyIdentifier != nil {
+               io.PushContext("propertyIdentifier")
                for _, _element := range m.PropertyIdentifier {
                        _elementErr := io.WriteUint8("", 8, _element)
                        if _elementErr != nil {
                                return errors.Wrap(_elementErr, "Error 
serializing 'propertyIdentifier' field")
                        }
                }
+               io.PopContext("propertyIdentifier")
        }
 
        // Const Field (openTag)
diff --git 
a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestIAm.go
 
b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestIAm.go
index cd91d71..9685ef4 100644
--- 
a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestIAm.go
+++ 
b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestIAm.go
@@ -282,12 +282,14 @@ func (m *BACnetUnconfirmedServiceRequestIAm) Serialize(io 
utils.WriteBuffer) err
 
                // Array Field (maximumApduLengthAccepted)
                if m.MaximumApduLengthAccepted != nil {
+                       io.PushContext("maximumApduLengthAccepted")
                        for _, _element := range m.MaximumApduLengthAccepted {
                                _elementErr := io.WriteInt8("", 8, _element)
                                if _elementErr != nil {
                                        return errors.Wrap(_elementErr, "Error 
serializing 'maximumApduLengthAccepted' field")
                                }
                        }
+                       io.PopContext("maximumApduLengthAccepted")
                }
 
                // Const Field (segmentationSupportedHeader)
diff --git 
a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestUnconfirmedPrivateTransfer.go
 
b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestUnconfirmedPrivateTransfer.go
index 84a198d..43c4222 100644
--- 
a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestUnconfirmedPrivateTransfer.go
+++ 
b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestUnconfirmedPrivateTransfer.go
@@ -247,12 +247,14 @@ func (m 
*BACnetUnconfirmedServiceRequestUnconfirmedPrivateTransfer) Serialize(io
 
                // Array Field (values)
                if m.Values != nil {
+                       io.PushContext("values")
                        for _, _element := range m.Values {
                                _elementErr := io.WriteInt8("", 8, _element)
                                if _elementErr != nil {
                                        return errors.Wrap(_elementErr, "Error 
serializing 'values' field")
                                }
                        }
+                       io.PopContext("values")
                }
 
                // Const Field (listOfValuesClosingTag)
diff --git 
a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestWhoHas.go
 
b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestWhoHas.go
index cb682f9..90ce439 100644
--- 
a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestWhoHas.go
+++ 
b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestWhoHas.go
@@ -270,12 +270,14 @@ func (m *BACnetUnconfirmedServiceRequestWhoHas) 
Serialize(io utils.WriteBuffer)
 
                // Array Field (objectName)
                if m.ObjectName != nil {
+                       io.PushContext("objectName")
                        for _, _element := range m.ObjectName {
                                _elementErr := io.WriteInt8("", 8, _element)
                                if _elementErr != nil {
                                        return errors.Wrap(_elementErr, "Error 
serializing 'objectName' field")
                                }
                        }
+                       io.PopContext("objectName")
                }
 
                io.PopContext("BACnetUnconfirmedServiceRequestWhoHas")
diff --git 
a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestWhoIs.go
 
b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestWhoIs.go
index a1ec3e6..759d883 100644
--- 
a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestWhoIs.go
+++ 
b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestWhoIs.go
@@ -219,12 +219,14 @@ func (m *BACnetUnconfirmedServiceRequestWhoIs) 
Serialize(io utils.WriteBuffer) e
 
                // Array Field (deviceInstanceRangeLowLimit)
                if m.DeviceInstanceRangeLowLimit != nil {
+                       io.PushContext("deviceInstanceRangeLowLimit")
                        for _, _element := range m.DeviceInstanceRangeLowLimit {
                                _elementErr := io.WriteInt8("", 8, _element)
                                if _elementErr != nil {
                                        return errors.Wrap(_elementErr, "Error 
serializing 'deviceInstanceRangeLowLimit' field")
                                }
                        }
+                       io.PopContext("deviceInstanceRangeLowLimit")
                }
 
                // Const Field (deviceInstanceRangeHighLimitHeader)
@@ -242,12 +244,14 @@ func (m *BACnetUnconfirmedServiceRequestWhoIs) 
Serialize(io utils.WriteBuffer) e
 
                // Array Field (deviceInstanceRangeHighLimit)
                if m.DeviceInstanceRangeHighLimit != nil {
+                       io.PushContext("deviceInstanceRangeHighLimit")
                        for _, _element := range m.DeviceInstanceRangeHighLimit 
{
                                _elementErr := io.WriteInt8("", 8, _element)
                                if _elementErr != nil {
                                        return errors.Wrap(_elementErr, "Error 
serializing 'deviceInstanceRangeHighLimit' field")
                                }
                        }
+                       io.PopContext("deviceInstanceRangeHighLimit")
                }
 
                io.PopContext("BACnetUnconfirmedServiceRequestWhoIs")
diff --git 
a/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCForwardedNPDU.go 
b/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCForwardedNPDU.go
index dd53157..da5596e 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCForwardedNPDU.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BVLCForwardedNPDU.go
@@ -156,12 +156,14 @@ func (m *BVLCForwardedNPDU) Serialize(io 
utils.WriteBuffer) error {
 
                // Array Field (ip)
                if m.Ip != nil {
+                       io.PushContext("ip")
                        for _, _element := range m.Ip {
                                _elementErr := io.WriteUint8("", 8, _element)
                                if _elementErr != nil {
                                        return errors.Wrap(_elementErr, "Error 
serializing 'ip' field")
                                }
                        }
+                       io.PopContext("ip")
                }
 
                // Simple Field (port)
diff --git 
a/plc4go/internal/plc4go/bacnetip/readwrite/model/NLMIAmRouterToNetwork.go 
b/plc4go/internal/plc4go/bacnetip/readwrite/model/NLMIAmRouterToNetwork.go
index 7feed1a..9b7dae8 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/NLMIAmRouterToNetwork.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/NLMIAmRouterToNetwork.go
@@ -135,12 +135,14 @@ func (m *NLMIAmRouterToNetwork) Serialize(io 
utils.WriteBuffer) error {
 
                // Array Field (destinationNetworkAddress)
                if m.DestinationNetworkAddress != nil {
+                       io.PushContext("destinationNetworkAddress")
                        for _, _element := range m.DestinationNetworkAddress {
                                _elementErr := io.WriteUint16("", 16, _element)
                                if _elementErr != nil {
                                        return errors.Wrap(_elementErr, "Error 
serializing 'destinationNetworkAddress' field")
                                }
                        }
+                       io.PopContext("destinationNetworkAddress")
                }
 
                io.PopContext("NLMIAmRouterToNetwork")
diff --git 
a/plc4go/internal/plc4go/bacnetip/readwrite/model/NLMWhoIsRouterToNetwork.go 
b/plc4go/internal/plc4go/bacnetip/readwrite/model/NLMWhoIsRouterToNetwork.go
index 29af994..2e8a85e 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/NLMWhoIsRouterToNetwork.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/NLMWhoIsRouterToNetwork.go
@@ -135,12 +135,14 @@ func (m *NLMWhoIsRouterToNetwork) Serialize(io 
utils.WriteBuffer) error {
 
                // Array Field (destinationNetworkAddress)
                if m.DestinationNetworkAddress != nil {
+                       io.PushContext("destinationNetworkAddress")
                        for _, _element := range m.DestinationNetworkAddress {
                                _elementErr := io.WriteUint16("", 16, _element)
                                if _elementErr != nil {
                                        return errors.Wrap(_elementErr, "Error 
serializing 'destinationNetworkAddress' field")
                                }
                        }
+                       io.PopContext("destinationNetworkAddress")
                }
 
                io.PopContext("NLMWhoIsRouterToNetwork")
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/NPDU.go 
b/plc4go/internal/plc4go/bacnetip/readwrite/model/NPDU.go
index d1d8da7..90e17ab 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/NPDU.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/NPDU.go
@@ -407,12 +407,14 @@ func (m *NPDU) Serialize(io utils.WriteBuffer) error {
 
        // Array Field (destinationAddress)
        if m.DestinationAddress != nil {
+               io.PushContext("destinationAddress")
                for _, _element := range m.DestinationAddress {
                        _elementErr := io.WriteUint8("", 8, _element)
                        if _elementErr != nil {
                                return errors.Wrap(_elementErr, "Error 
serializing 'destinationAddress' field")
                        }
                }
+               io.PopContext("destinationAddress")
        }
 
        // Optional Field (sourceNetworkAddress) (Can be skipped, if the value 
is null)
@@ -437,12 +439,14 @@ func (m *NPDU) Serialize(io utils.WriteBuffer) error {
 
        // Array Field (sourceAddress)
        if m.SourceAddress != nil {
+               io.PushContext("sourceAddress")
                for _, _element := range m.SourceAddress {
                        _elementErr := io.WriteUint8("", 8, _element)
                        if _elementErr != nil {
                                return errors.Wrap(_elementErr, "Error 
serializing 'sourceAddress' field")
                        }
                }
+               io.PopContext("sourceAddress")
        }
 
        // Optional Field (hopCount) (Can be skipped, if the value is null)
diff --git 
a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataDeviceDescriptorResponse.go
 
b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataDeviceDescriptorResponse.go
index ce6f81a..07fbc0b 100644
--- 
a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataDeviceDescriptorResponse.go
+++ 
b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataDeviceDescriptorResponse.go
@@ -153,12 +153,14 @@ func (m *ApduDataDeviceDescriptorResponse) Serialize(io 
utils.WriteBuffer) error
 
                // Array Field (data)
                if m.Data != nil {
+                       io.PushContext("data")
                        for _, _element := range m.Data {
                                _elementErr := io.WriteInt8("", 8, _element)
                                if _elementErr != nil {
                                        return errors.Wrap(_elementErr, "Error 
serializing 'data' field")
                                }
                        }
+                       io.PopContext("data")
                }
 
                io.PopContext("ApduDataDeviceDescriptorResponse")
diff --git 
a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtAuthorizeRequest.go
 
b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtAuthorizeRequest.go
index 55913e3..e7d3fb4 100644
--- 
a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtAuthorizeRequest.go
+++ 
b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtAuthorizeRequest.go
@@ -151,12 +151,14 @@ func (m *ApduDataExtAuthorizeRequest) Serialize(io 
utils.WriteBuffer) error {
 
                // Array Field (data)
                if m.Data != nil {
+                       io.PushContext("data")
                        for _, _element := range m.Data {
                                _elementErr := io.WriteUint8("", 8, _element)
                                if _elementErr != nil {
                                        return errors.Wrap(_elementErr, "Error 
serializing 'data' field")
                                }
                        }
+                       io.PopContext("data")
                }
 
                io.PopContext("ApduDataExtAuthorizeRequest")
diff --git 
a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtPropertyValueResponse.go
 
b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtPropertyValueResponse.go
index c4978aa..31b62f9 100644
--- 
a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtPropertyValueResponse.go
+++ 
b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtPropertyValueResponse.go
@@ -208,12 +208,14 @@ func (m *ApduDataExtPropertyValueResponse) Serialize(io 
utils.WriteBuffer) error
 
                // Array Field (data)
                if m.Data != nil {
+                       io.PushContext("data")
                        for _, _element := range m.Data {
                                _elementErr := io.WriteUint8("", 8, _element)
                                if _elementErr != nil {
                                        return errors.Wrap(_elementErr, "Error 
serializing 'data' field")
                                }
                        }
+                       io.PopContext("data")
                }
 
                io.PopContext("ApduDataExtPropertyValueResponse")
diff --git 
a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtPropertyValueWrite.go
 
b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtPropertyValueWrite.go
index f1636e2..2f40e1c 100644
--- 
a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtPropertyValueWrite.go
+++ 
b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataExtPropertyValueWrite.go
@@ -208,12 +208,14 @@ func (m *ApduDataExtPropertyValueWrite) Serialize(io 
utils.WriteBuffer) error {
 
                // Array Field (data)
                if m.Data != nil {
+                       io.PushContext("data")
                        for _, _element := range m.Data {
                                _elementErr := io.WriteUint8("", 8, _element)
                                if _elementErr != nil {
                                        return errors.Wrap(_elementErr, "Error 
serializing 'data' field")
                                }
                        }
+                       io.PopContext("data")
                }
 
                io.PopContext("ApduDataExtPropertyValueWrite")
diff --git 
a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataGroupValueResponse.go 
b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataGroupValueResponse.go
index 8596134..e2bec4a 100644
--- 
a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataGroupValueResponse.go
+++ 
b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataGroupValueResponse.go
@@ -153,12 +153,14 @@ func (m *ApduDataGroupValueResponse) Serialize(io 
utils.WriteBuffer) error {
 
                // Array Field (data)
                if m.Data != nil {
+                       io.PushContext("data")
                        for _, _element := range m.Data {
                                _elementErr := io.WriteInt8("", 8, _element)
                                if _elementErr != nil {
                                        return errors.Wrap(_elementErr, "Error 
serializing 'data' field")
                                }
                        }
+                       io.PopContext("data")
                }
 
                io.PopContext("ApduDataGroupValueResponse")
diff --git 
a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataGroupValueWrite.go 
b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataGroupValueWrite.go
index cc1e112..ac1620f 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataGroupValueWrite.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataGroupValueWrite.go
@@ -153,12 +153,14 @@ func (m *ApduDataGroupValueWrite) Serialize(io 
utils.WriteBuffer) error {
 
                // Array Field (data)
                if m.Data != nil {
+                       io.PushContext("data")
                        for _, _element := range m.Data {
                                _elementErr := io.WriteInt8("", 8, _element)
                                if _elementErr != nil {
                                        return errors.Wrap(_elementErr, "Error 
serializing 'data' field")
                                }
                        }
+                       io.PopContext("data")
                }
 
                io.PopContext("ApduDataGroupValueWrite")
diff --git 
a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataMemoryResponse.go 
b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataMemoryResponse.go
index f388812..4d91f76 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataMemoryResponse.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/ApduDataMemoryResponse.go
@@ -168,12 +168,14 @@ func (m *ApduDataMemoryResponse) Serialize(io 
utils.WriteBuffer) error {
 
                // Array Field (data)
                if m.Data != nil {
+                       io.PushContext("data")
                        for _, _element := range m.Data {
                                _elementErr := io.WriteUint8("", 8, _element)
                                if _elementErr != nil {
                                        return errors.Wrap(_elementErr, "Error 
serializing 'data' field")
                                }
                        }
+                       io.PopContext("data")
                }
 
                io.PopContext("ApduDataMemoryResponse")
diff --git 
a/plc4go/internal/plc4go/knxnetip/readwrite/model/ComObjectTableRealisationType1.go
 
b/plc4go/internal/plc4go/knxnetip/readwrite/model/ComObjectTableRealisationType1.go
index 71658a4..c5b775d 100644
--- 
a/plc4go/internal/plc4go/knxnetip/readwrite/model/ComObjectTableRealisationType1.go
+++ 
b/plc4go/internal/plc4go/knxnetip/readwrite/model/ComObjectTableRealisationType1.go
@@ -173,12 +173,14 @@ func (m *ComObjectTableRealisationType1) Serialize(io 
utils.WriteBuffer) error {
 
                // Array Field (comObjectDescriptors)
                if m.ComObjectDescriptors != nil {
+                       io.PushContext("comObjectDescriptors")
                        for _, _element := range m.ComObjectDescriptors {
                                _elementErr := _element.Serialize(io)
                                if _elementErr != nil {
                                        return errors.Wrap(_elementErr, "Error 
serializing 'comObjectDescriptors' field")
                                }
                        }
+                       io.PopContext("comObjectDescriptors")
                }
 
                io.PopContext("ComObjectTableRealisationType1")
diff --git 
a/plc4go/internal/plc4go/knxnetip/readwrite/model/ComObjectTableRealisationType2.go
 
b/plc4go/internal/plc4go/knxnetip/readwrite/model/ComObjectTableRealisationType2.go
index 8efc781..2a71270 100644
--- 
a/plc4go/internal/plc4go/knxnetip/readwrite/model/ComObjectTableRealisationType2.go
+++ 
b/plc4go/internal/plc4go/knxnetip/readwrite/model/ComObjectTableRealisationType2.go
@@ -173,12 +173,14 @@ func (m *ComObjectTableRealisationType2) Serialize(io 
utils.WriteBuffer) error {
 
                // Array Field (comObjectDescriptors)
                if m.ComObjectDescriptors != nil {
+                       io.PushContext("comObjectDescriptors")
                        for _, _element := range m.ComObjectDescriptors {
                                _elementErr := _element.Serialize(io)
                                if _elementErr != nil {
                                        return errors.Wrap(_elementErr, "Error 
serializing 'comObjectDescriptors' field")
                                }
                        }
+                       io.PopContext("comObjectDescriptors")
                }
 
                io.PopContext("ComObjectTableRealisationType2")
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/DIBDeviceInfo.go 
b/plc4go/internal/plc4go/knxnetip/readwrite/model/DIBDeviceInfo.go
index 661ecef..4f2a7b1 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/DIBDeviceInfo.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/DIBDeviceInfo.go
@@ -241,12 +241,14 @@ func (m *DIBDeviceInfo) Serialize(io utils.WriteBuffer) 
error {
 
        // Array Field (knxNetIpDeviceSerialNumber)
        if m.KnxNetIpDeviceSerialNumber != nil {
+               io.PushContext("knxNetIpDeviceSerialNumber")
                for _, _element := range m.KnxNetIpDeviceSerialNumber {
                        _elementErr := io.WriteInt8("", 8, _element)
                        if _elementErr != nil {
                                return errors.Wrap(_elementErr, "Error 
serializing 'knxNetIpDeviceSerialNumber' field")
                        }
                }
+               io.PopContext("knxNetIpDeviceSerialNumber")
        }
 
        // Simple Field (knxNetIpDeviceMulticastAddress)
@@ -263,12 +265,14 @@ func (m *DIBDeviceInfo) Serialize(io utils.WriteBuffer) 
error {
 
        // Array Field (deviceFriendlyName)
        if m.DeviceFriendlyName != nil {
+               io.PushContext("deviceFriendlyName")
                for _, _element := range m.DeviceFriendlyName {
                        _elementErr := io.WriteInt8("", 8, _element)
                        if _elementErr != nil {
                                return errors.Wrap(_elementErr, "Error 
serializing 'deviceFriendlyName' field")
                        }
                }
+               io.PopContext("deviceFriendlyName")
        }
 
        io.PopContext("DIBDeviceInfo")
diff --git 
a/plc4go/internal/plc4go/knxnetip/readwrite/model/DIBSuppSvcFamilies.go 
b/plc4go/internal/plc4go/knxnetip/readwrite/model/DIBSuppSvcFamilies.go
index 3fadc18..7199b3e 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/DIBSuppSvcFamilies.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/DIBSuppSvcFamilies.go
@@ -142,12 +142,14 @@ func (m *DIBSuppSvcFamilies) Serialize(io 
utils.WriteBuffer) error {
 
        // Array Field (serviceIds)
        if m.ServiceIds != nil {
+               io.PushContext("serviceIds")
                for _, _element := range m.ServiceIds {
                        _elementErr := _element.Serialize(io)
                        if _elementErr != nil {
                                return errors.Wrap(_elementErr, "Error 
serializing 'serviceIds' field")
                        }
                }
+               io.PopContext("serviceIds")
        }
 
        io.PopContext("DIBSuppSvcFamilies")
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/IPAddress.go 
b/plc4go/internal/plc4go/knxnetip/readwrite/model/IPAddress.go
index e0827a9..0060a73 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/IPAddress.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/IPAddress.go
@@ -106,12 +106,14 @@ func (m *IPAddress) Serialize(io utils.WriteBuffer) error 
{
 
        // Array Field (addr)
        if m.Addr != nil {
+               io.PushContext("addr")
                for _, _element := range m.Addr {
                        _elementErr := io.WriteInt8("", 8, _element)
                        if _elementErr != nil {
                                return errors.Wrap(_elementErr, "Error 
serializing 'addr' field")
                        }
                }
+               io.PopContext("addr")
        }
 
        io.PopContext("IPAddress")
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/LBusmonInd.go 
b/plc4go/internal/plc4go/knxnetip/readwrite/model/LBusmonInd.go
index 104d3f7..5ce05ac 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/LBusmonInd.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/LBusmonInd.go
@@ -186,12 +186,14 @@ func (m *LBusmonInd) Serialize(io utils.WriteBuffer) 
error {
 
                // Array Field (additionalInformation)
                if m.AdditionalInformation != nil {
+                       io.PushContext("additionalInformation")
                        for _, _element := range m.AdditionalInformation {
                                _elementErr := _element.Serialize(io)
                                if _elementErr != nil {
                                        return errors.Wrap(_elementErr, "Error 
serializing 'additionalInformation' field")
                                }
                        }
+                       io.PopContext("additionalInformation")
                }
 
                // Simple Field (dataFrame)
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/LDataCon.go 
b/plc4go/internal/plc4go/knxnetip/readwrite/model/LDataCon.go
index 0c8e52c..d3fdbd4 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/LDataCon.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/LDataCon.go
@@ -167,12 +167,14 @@ func (m *LDataCon) Serialize(io utils.WriteBuffer) error {
 
                // Array Field (additionalInformation)
                if m.AdditionalInformation != nil {
+                       io.PushContext("additionalInformation")
                        for _, _element := range m.AdditionalInformation {
                                _elementErr := _element.Serialize(io)
                                if _elementErr != nil {
                                        return errors.Wrap(_elementErr, "Error 
serializing 'additionalInformation' field")
                                }
                        }
+                       io.PopContext("additionalInformation")
                }
 
                // Simple Field (dataFrame)
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/LDataExtended.go 
b/plc4go/internal/plc4go/knxnetip/readwrite/model/LDataExtended.go
index b16aedf..5391c7f 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/LDataExtended.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/LDataExtended.go
@@ -240,12 +240,14 @@ func (m *LDataExtended) Serialize(io utils.WriteBuffer) 
error {
 
                // Array Field (destinationAddress)
                if m.DestinationAddress != nil {
+                       io.PushContext("destinationAddress")
                        for _, _element := range m.DestinationAddress {
                                _elementErr := io.WriteInt8("", 8, _element)
                                if _elementErr != nil {
                                        return errors.Wrap(_elementErr, "Error 
serializing 'destinationAddress' field")
                                }
                        }
+                       io.PopContext("destinationAddress")
                }
 
                // Implicit Field (dataLength) (Used for parsing, but it's 
value is not stored as it's implicitly given by the objects content)
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/LDataInd.go 
b/plc4go/internal/plc4go/knxnetip/readwrite/model/LDataInd.go
index d223ee2..e9564a0 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/LDataInd.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/LDataInd.go
@@ -167,12 +167,14 @@ func (m *LDataInd) Serialize(io utils.WriteBuffer) error {
 
                // Array Field (additionalInformation)
                if m.AdditionalInformation != nil {
+                       io.PushContext("additionalInformation")
                        for _, _element := range m.AdditionalInformation {
                                _elementErr := _element.Serialize(io)
                                if _elementErr != nil {
                                        return errors.Wrap(_elementErr, "Error 
serializing 'additionalInformation' field")
                                }
                        }
+                       io.PopContext("additionalInformation")
                }
 
                // Simple Field (dataFrame)
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/LDataReq.go 
b/plc4go/internal/plc4go/knxnetip/readwrite/model/LDataReq.go
index 986b310..49c79d9 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/LDataReq.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/LDataReq.go
@@ -167,12 +167,14 @@ func (m *LDataReq) Serialize(io utils.WriteBuffer) error {
 
                // Array Field (additionalInformation)
                if m.AdditionalInformation != nil {
+                       io.PushContext("additionalInformation")
                        for _, _element := range m.AdditionalInformation {
                                _elementErr := _element.Serialize(io)
                                if _elementErr != nil {
                                        return errors.Wrap(_elementErr, "Error 
serializing 'additionalInformation' field")
                                }
                        }
+                       io.PopContext("additionalInformation")
                }
 
                // Simple Field (dataFrame)
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/LPollData.go 
b/plc4go/internal/plc4go/knxnetip/readwrite/model/LPollData.go
index 2290dc0..4bfd083 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/LPollData.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/LPollData.go
@@ -191,12 +191,14 @@ func (m *LPollData) Serialize(io utils.WriteBuffer) error 
{
 
                // Array Field (targetAddress)
                if m.TargetAddress != nil {
+                       io.PushContext("targetAddress")
                        for _, _element := range m.TargetAddress {
                                _elementErr := io.WriteInt8("", 8, _element)
                                if _elementErr != nil {
                                        return errors.Wrap(_elementErr, "Error 
serializing 'targetAddress' field")
                                }
                        }
+                       io.PopContext("targetAddress")
                }
 
                // Reserved Field (reserved)
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/MACAddress.go 
b/plc4go/internal/plc4go/knxnetip/readwrite/model/MACAddress.go
index d322847..fa64a02 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/MACAddress.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/MACAddress.go
@@ -106,12 +106,14 @@ func (m *MACAddress) Serialize(io utils.WriteBuffer) 
error {
 
        // Array Field (addr)
        if m.Addr != nil {
+               io.PushContext("addr")
                for _, _element := range m.Addr {
                        _elementErr := io.WriteInt8("", 8, _element)
                        if _elementErr != nil {
                                return errors.Wrap(_elementErr, "Error 
serializing 'addr' field")
                        }
                }
+               io.PopContext("addr")
        }
 
        io.PopContext("MACAddress")
diff --git a/plc4go/internal/plc4go/knxnetip/readwrite/model/UnknownMessage.go 
b/plc4go/internal/plc4go/knxnetip/readwrite/model/UnknownMessage.go
index f80fa1a..ebd3551 100644
--- a/plc4go/internal/plc4go/knxnetip/readwrite/model/UnknownMessage.go
+++ b/plc4go/internal/plc4go/knxnetip/readwrite/model/UnknownMessage.go
@@ -134,12 +134,14 @@ func (m *UnknownMessage) Serialize(io utils.WriteBuffer) 
error {
 
                // Array Field (unknownData)
                if m.UnknownData != nil {
+                       io.PushContext("unknownData")
                        for _, _element := range m.UnknownData {
                                _elementErr := io.WriteInt8("", 8, _element)
                                if _elementErr != nil {
                                        return errors.Wrap(_elementErr, "Error 
serializing 'unknownData' field")
                                }
                        }
+                       io.PopContext("unknownData")
                }
 
                io.PopContext("UnknownMessage")
diff --git 
a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUGetComEventLogResponse.go
 
b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUGetComEventLogResponse.go
index 6d57061..c1ead49 100644
--- 
a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUGetComEventLogResponse.go
+++ 
b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUGetComEventLogResponse.go
@@ -216,12 +216,14 @@ func (m *ModbusPDUGetComEventLogResponse) Serialize(io 
utils.WriteBuffer) error
 
                // Array Field (events)
                if m.Events != nil {
+                       io.PushContext("events")
                        for _, _element := range m.Events {
                                _elementErr := io.WriteInt8("", 8, _element)
                                if _elementErr != nil {
                                        return errors.Wrap(_elementErr, "Error 
serializing 'events' field")
                                }
                        }
+                       io.PopContext("events")
                }
 
                io.PopContext("ModbusPDUGetComEventLogResponse")
diff --git 
a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadCoilsResponse.go 
b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadCoilsResponse.go
index f8452cd..c536286 100644
--- 
a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadCoilsResponse.go
+++ 
b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadCoilsResponse.go
@@ -159,12 +159,14 @@ func (m *ModbusPDUReadCoilsResponse) Serialize(io 
utils.WriteBuffer) error {
 
                // Array Field (value)
                if m.Value != nil {
+                       io.PushContext("value")
                        for _, _element := range m.Value {
                                _elementErr := io.WriteInt8("", 8, _element)
                                if _elementErr != nil {
                                        return errors.Wrap(_elementErr, "Error 
serializing 'value' field")
                                }
                        }
+                       io.PopContext("value")
                }
 
                io.PopContext("ModbusPDUReadCoilsResponse")
diff --git 
a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadDiscreteInputsResponse.go
 
b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadDiscreteInputsResponse.go
index 321c337..03e5933 100644
--- 
a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadDiscreteInputsResponse.go
+++ 
b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadDiscreteInputsResponse.go
@@ -159,12 +159,14 @@ func (m *ModbusPDUReadDiscreteInputsResponse) 
Serialize(io utils.WriteBuffer) er
 
                // Array Field (value)
                if m.Value != nil {
+                       io.PushContext("value")
                        for _, _element := range m.Value {
                                _elementErr := io.WriteInt8("", 8, _element)
                                if _elementErr != nil {
                                        return errors.Wrap(_elementErr, "Error 
serializing 'value' field")
                                }
                        }
+                       io.PopContext("value")
                }
 
                io.PopContext("ModbusPDUReadDiscreteInputsResponse")
diff --git 
a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadFifoQueueResponse.go
 
b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadFifoQueueResponse.go
index 7ae21a5..3126910 100644
--- 
a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadFifoQueueResponse.go
+++ 
b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadFifoQueueResponse.go
@@ -174,12 +174,14 @@ func (m *ModbusPDUReadFifoQueueResponse) Serialize(io 
utils.WriteBuffer) error {
 
                // Array Field (fifoValue)
                if m.FifoValue != nil {
+                       io.PushContext("fifoValue")
                        for _, _element := range m.FifoValue {
                                _elementErr := io.WriteUint16("", 16, _element)
                                if _elementErr != nil {
                                        return errors.Wrap(_elementErr, "Error 
serializing 'fifoValue' field")
                                }
                        }
+                       io.PopContext("fifoValue")
                }
 
                io.PopContext("ModbusPDUReadFifoQueueResponse")
diff --git 
a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadFileRecordRequest.go
 
b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadFileRecordRequest.go
index 1207dfa..5519a5f 100644
--- 
a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadFileRecordRequest.go
+++ 
b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadFileRecordRequest.go
@@ -168,12 +168,14 @@ func (m *ModbusPDUReadFileRecordRequest) Serialize(io 
utils.WriteBuffer) error {
 
                // Array Field (items)
                if m.Items != nil {
+                       io.PushContext("items")
                        for _, _element := range m.Items {
                                _elementErr := _element.Serialize(io)
                                if _elementErr != nil {
                                        return errors.Wrap(_elementErr, "Error 
serializing 'items' field")
                                }
                        }
+                       io.PopContext("items")
                }
 
                io.PopContext("ModbusPDUReadFileRecordRequest")
diff --git 
a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadFileRecordResponse.go
 
b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadFileRecordResponse.go
index 0c79017..c3228da 100644
--- 
a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadFileRecordResponse.go
+++ 
b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadFileRecordResponse.go
@@ -168,12 +168,14 @@ func (m *ModbusPDUReadFileRecordResponse) Serialize(io 
utils.WriteBuffer) error
 
                // Array Field (items)
                if m.Items != nil {
+                       io.PushContext("items")
                        for _, _element := range m.Items {
                                _elementErr := _element.Serialize(io)
                                if _elementErr != nil {
                                        return errors.Wrap(_elementErr, "Error 
serializing 'items' field")
                                }
                        }
+                       io.PopContext("items")
                }
 
                io.PopContext("ModbusPDUReadFileRecordResponse")
diff --git 
a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadFileRecordResponseItem.go
 
b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadFileRecordResponseItem.go
index 98f7c32..ccb4f91 100644
--- 
a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadFileRecordResponseItem.go
+++ 
b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadFileRecordResponseItem.go
@@ -142,12 +142,14 @@ func (m *ModbusPDUReadFileRecordResponseItem) 
Serialize(io utils.WriteBuffer) er
 
        // Array Field (data)
        if m.Data != nil {
+               io.PushContext("data")
                for _, _element := range m.Data {
                        _elementErr := io.WriteInt8("", 8, _element)
                        if _elementErr != nil {
                                return errors.Wrap(_elementErr, "Error 
serializing 'data' field")
                        }
                }
+               io.PopContext("data")
        }
 
        io.PopContext("ModbusPDUReadFileRecordResponseItem")
diff --git 
a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadHoldingRegistersResponse.go
 
b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadHoldingRegistersResponse.go
index cab9a4e..37a39ca 100644
--- 
a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadHoldingRegistersResponse.go
+++ 
b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadHoldingRegistersResponse.go
@@ -159,12 +159,14 @@ func (m *ModbusPDUReadHoldingRegistersResponse) 
Serialize(io utils.WriteBuffer)
 
                // Array Field (value)
                if m.Value != nil {
+                       io.PushContext("value")
                        for _, _element := range m.Value {
                                _elementErr := io.WriteInt8("", 8, _element)
                                if _elementErr != nil {
                                        return errors.Wrap(_elementErr, "Error 
serializing 'value' field")
                                }
                        }
+                       io.PopContext("value")
                }
 
                io.PopContext("ModbusPDUReadHoldingRegistersResponse")
diff --git 
a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadInputRegistersResponse.go
 
b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadInputRegistersResponse.go
index 98117ba..dc51dd2 100644
--- 
a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadInputRegistersResponse.go
+++ 
b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadInputRegistersResponse.go
@@ -159,12 +159,14 @@ func (m *ModbusPDUReadInputRegistersResponse) 
Serialize(io utils.WriteBuffer) er
 
                // Array Field (value)
                if m.Value != nil {
+                       io.PushContext("value")
                        for _, _element := range m.Value {
                                _elementErr := io.WriteInt8("", 8, _element)
                                if _elementErr != nil {
                                        return errors.Wrap(_elementErr, "Error 
serializing 'value' field")
                                }
                        }
+                       io.PopContext("value")
                }
 
                io.PopContext("ModbusPDUReadInputRegistersResponse")
diff --git 
a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadWriteMultipleHoldingRegistersRequest.go
 
b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadWriteMultipleHoldingRegistersRequest.go
index d16963d..bf6d5bc 100644
--- 
a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadWriteMultipleHoldingRegistersRequest.go
+++ 
b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadWriteMultipleHoldingRegistersRequest.go
@@ -235,12 +235,14 @@ func (m 
*ModbusPDUReadWriteMultipleHoldingRegistersRequest) Serialize(io utils.W
 
                // Array Field (value)
                if m.Value != nil {
+                       io.PushContext("value")
                        for _, _element := range m.Value {
                                _elementErr := io.WriteInt8("", 8, _element)
                                if _elementErr != nil {
                                        return errors.Wrap(_elementErr, "Error 
serializing 'value' field")
                                }
                        }
+                       io.PopContext("value")
                }
 
                
io.PopContext("ModbusPDUReadWriteMultipleHoldingRegistersRequest")
diff --git 
a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadWriteMultipleHoldingRegistersResponse.go
 
b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadWriteMultipleHoldingRegistersResponse.go
index ed11972..abe3b36 100644
--- 
a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadWriteMultipleHoldingRegistersResponse.go
+++ 
b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReadWriteMultipleHoldingRegistersResponse.go
@@ -159,12 +159,14 @@ func (m 
*ModbusPDUReadWriteMultipleHoldingRegistersResponse) Serialize(io utils.
 
                // Array Field (value)
                if m.Value != nil {
+                       io.PushContext("value")
                        for _, _element := range m.Value {
                                _elementErr := io.WriteInt8("", 8, _element)
                                if _elementErr != nil {
                                        return errors.Wrap(_elementErr, "Error 
serializing 'value' field")
                                }
                        }
+                       io.PopContext("value")
                }
 
                
io.PopContext("ModbusPDUReadWriteMultipleHoldingRegistersResponse")
diff --git 
a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReportServerIdResponse.go
 
b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReportServerIdResponse.go
index dd01c70..9fdeee8 100644
--- 
a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReportServerIdResponse.go
+++ 
b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUReportServerIdResponse.go
@@ -159,12 +159,14 @@ func (m *ModbusPDUReportServerIdResponse) Serialize(io 
utils.WriteBuffer) error
 
                // Array Field (value)
                if m.Value != nil {
+                       io.PushContext("value")
                        for _, _element := range m.Value {
                                _elementErr := io.WriteInt8("", 8, _element)
                                if _elementErr != nil {
                                        return errors.Wrap(_elementErr, "Error 
serializing 'value' field")
                                }
                        }
+                       io.PopContext("value")
                }
 
                io.PopContext("ModbusPDUReportServerIdResponse")
diff --git 
a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUWriteFileRecordRequest.go
 
b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUWriteFileRecordRequest.go
index b84ec3f..a0b3ed4 100644
--- 
a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUWriteFileRecordRequest.go
+++ 
b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUWriteFileRecordRequest.go
@@ -168,12 +168,14 @@ func (m *ModbusPDUWriteFileRecordRequest) Serialize(io 
utils.WriteBuffer) error
 
                // Array Field (items)
                if m.Items != nil {
+                       io.PushContext("items")
                        for _, _element := range m.Items {
                                _elementErr := _element.Serialize(io)
                                if _elementErr != nil {
                                        return errors.Wrap(_elementErr, "Error 
serializing 'items' field")
                                }
                        }
+                       io.PopContext("items")
                }
 
                io.PopContext("ModbusPDUWriteFileRecordRequest")
diff --git 
a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUWriteFileRecordRequestItem.go
 
b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUWriteFileRecordRequestItem.go
index 7581855..8278e62 100644
--- 
a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUWriteFileRecordRequestItem.go
+++ 
b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUWriteFileRecordRequestItem.go
@@ -176,12 +176,14 @@ func (m *ModbusPDUWriteFileRecordRequestItem) 
Serialize(io utils.WriteBuffer) er
 
        // Array Field (recordData)
        if m.RecordData != nil {
+               io.PushContext("recordData")
                for _, _element := range m.RecordData {
                        _elementErr := io.WriteInt8("", 8, _element)
                        if _elementErr != nil {
                                return errors.Wrap(_elementErr, "Error 
serializing 'recordData' field")
                        }
                }
+               io.PopContext("recordData")
        }
 
        io.PopContext("ModbusPDUWriteFileRecordRequestItem")
diff --git 
a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUWriteFileRecordResponse.go
 
b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUWriteFileRecordResponse.go
index 64cacd7..b5ddbf4 100644
--- 
a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUWriteFileRecordResponse.go
+++ 
b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUWriteFileRecordResponse.go
@@ -168,12 +168,14 @@ func (m *ModbusPDUWriteFileRecordResponse) Serialize(io 
utils.WriteBuffer) error
 
                // Array Field (items)
                if m.Items != nil {
+                       io.PushContext("items")
                        for _, _element := range m.Items {
                                _elementErr := _element.Serialize(io)
                                if _elementErr != nil {
                                        return errors.Wrap(_elementErr, "Error 
serializing 'items' field")
                                }
                        }
+                       io.PopContext("items")
                }
 
                io.PopContext("ModbusPDUWriteFileRecordResponse")
diff --git 
a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUWriteFileRecordResponseItem.go
 
b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUWriteFileRecordResponseItem.go
index 512d4e0..f62c874 100644
--- 
a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUWriteFileRecordResponseItem.go
+++ 
b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUWriteFileRecordResponseItem.go
@@ -176,12 +176,14 @@ func (m *ModbusPDUWriteFileRecordResponseItem) 
Serialize(io utils.WriteBuffer) e
 
        // Array Field (recordData)
        if m.RecordData != nil {
+               io.PushContext("recordData")
                for _, _element := range m.RecordData {
                        _elementErr := io.WriteInt8("", 8, _element)
                        if _elementErr != nil {
                                return errors.Wrap(_elementErr, "Error 
serializing 'recordData' field")
                        }
                }
+               io.PopContext("recordData")
        }
 
        io.PopContext("ModbusPDUWriteFileRecordResponseItem")
diff --git 
a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUWriteMultipleCoilsRequest.go
 
b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUWriteMultipleCoilsRequest.go
index 808fd97..b6b65e1 100644
--- 
a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUWriteMultipleCoilsRequest.go
+++ 
b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUWriteMultipleCoilsRequest.go
@@ -197,12 +197,14 @@ func (m *ModbusPDUWriteMultipleCoilsRequest) Serialize(io 
utils.WriteBuffer) err
 
                // Array Field (value)
                if m.Value != nil {
+                       io.PushContext("value")
                        for _, _element := range m.Value {
                                _elementErr := io.WriteInt8("", 8, _element)
                                if _elementErr != nil {
                                        return errors.Wrap(_elementErr, "Error 
serializing 'value' field")
                                }
                        }
+                       io.PopContext("value")
                }
 
                io.PopContext("ModbusPDUWriteMultipleCoilsRequest")
diff --git 
a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUWriteMultipleHoldingRegistersRequest.go
 
b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUWriteMultipleHoldingRegistersRequest.go
index dc9997f..adf60c7 100644
--- 
a/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUWriteMultipleHoldingRegistersRequest.go
+++ 
b/plc4go/internal/plc4go/modbus/readwrite/model/ModbusPDUWriteMultipleHoldingRegistersRequest.go
@@ -197,12 +197,14 @@ func (m *ModbusPDUWriteMultipleHoldingRegistersRequest) 
Serialize(io utils.Write
 
                // Array Field (value)
                if m.Value != nil {
+                       io.PushContext("value")
                        for _, _element := range m.Value {
                                _elementErr := io.WriteInt8("", 8, _element)
                                if _elementErr != nil {
                                        return errors.Wrap(_elementErr, "Error 
serializing 'value' field")
                                }
                        }
+                       io.PopContext("value")
                }
 
                io.PopContext("ModbusPDUWriteMultipleHoldingRegistersRequest")
diff --git a/plc4go/internal/plc4go/s7/readwrite/model/COTPPacket.go 
b/plc4go/internal/plc4go/s7/readwrite/model/COTPPacket.go
index 8756266..7795089 100644
--- a/plc4go/internal/plc4go/s7/readwrite/model/COTPPacket.go
+++ b/plc4go/internal/plc4go/s7/readwrite/model/COTPPacket.go
@@ -218,12 +218,14 @@ func (m *COTPPacket) SerializeParent(io 
utils.WriteBuffer, child ICOTPPacket, se
 
        // Array Field (parameters)
        if m.Parameters != nil {
+               io.PushContext("parameters")
                for _, _element := range m.Parameters {
                        _elementErr := _element.Serialize(io)
                        if _elementErr != nil {
                                return errors.Wrap(_elementErr, "Error 
serializing 'parameters' field")
                        }
                }
+               io.PopContext("parameters")
        }
 
        // Optional Field (payload) (Can be skipped, if the value is null)
diff --git 
a/plc4go/internal/plc4go/s7/readwrite/model/COTPParameterDisconnectAdditionalInformation.go
 
b/plc4go/internal/plc4go/s7/readwrite/model/COTPParameterDisconnectAdditionalInformation.go
index 24922bf..9752214 100644
--- 
a/plc4go/internal/plc4go/s7/readwrite/model/COTPParameterDisconnectAdditionalInformation.go
+++ 
b/plc4go/internal/plc4go/s7/readwrite/model/COTPParameterDisconnectAdditionalInformation.go
@@ -132,12 +132,14 @@ func (m *COTPParameterDisconnectAdditionalInformation) 
Serialize(io utils.WriteB
 
                // Array Field (data)
                if m.Data != nil {
+                       io.PushContext("data")
                        for _, _element := range m.Data {
                                _elementErr := io.WriteUint8("", 8, _element)
                                if _elementErr != nil {
                                        return errors.Wrap(_elementErr, "Error 
serializing 'data' field")
                                }
                        }
+                       io.PopContext("data")
                }
 
                io.PopContext("COTPParameterDisconnectAdditionalInformation")
diff --git 
a/plc4go/internal/plc4go/s7/readwrite/model/S7ParameterReadVarRequest.go 
b/plc4go/internal/plc4go/s7/readwrite/model/S7ParameterReadVarRequest.go
index 0679e3f..30b2aaf 100644
--- a/plc4go/internal/plc4go/s7/readwrite/model/S7ParameterReadVarRequest.go
+++ b/plc4go/internal/plc4go/s7/readwrite/model/S7ParameterReadVarRequest.go
@@ -156,12 +156,14 @@ func (m *S7ParameterReadVarRequest) Serialize(io 
utils.WriteBuffer) error {
 
                // Array Field (items)
                if m.Items != nil {
+                       io.PushContext("items")
                        for _, _element := range m.Items {
                                _elementErr := _element.Serialize(io)
                                if _elementErr != nil {
                                        return errors.Wrap(_elementErr, "Error 
serializing 'items' field")
                                }
                        }
+                       io.PopContext("items")
                }
 
                io.PopContext("S7ParameterReadVarRequest")
diff --git a/plc4go/internal/plc4go/s7/readwrite/model/S7ParameterUserData.go 
b/plc4go/internal/plc4go/s7/readwrite/model/S7ParameterUserData.go
index fbb5573..14c12b9 100644
--- a/plc4go/internal/plc4go/s7/readwrite/model/S7ParameterUserData.go
+++ b/plc4go/internal/plc4go/s7/readwrite/model/S7ParameterUserData.go
@@ -156,12 +156,14 @@ func (m *S7ParameterUserData) Serialize(io 
utils.WriteBuffer) error {
 
                // Array Field (items)
                if m.Items != nil {
+                       io.PushContext("items")
                        for _, _element := range m.Items {
                                _elementErr := _element.Serialize(io)
                                if _elementErr != nil {
                                        return errors.Wrap(_elementErr, "Error 
serializing 'items' field")
                                }
                        }
+                       io.PopContext("items")
                }
 
                io.PopContext("S7ParameterUserData")
diff --git 
a/plc4go/internal/plc4go/s7/readwrite/model/S7ParameterWriteVarRequest.go 
b/plc4go/internal/plc4go/s7/readwrite/model/S7ParameterWriteVarRequest.go
index c3202f4..eab943e 100644
--- a/plc4go/internal/plc4go/s7/readwrite/model/S7ParameterWriteVarRequest.go
+++ b/plc4go/internal/plc4go/s7/readwrite/model/S7ParameterWriteVarRequest.go
@@ -156,12 +156,14 @@ func (m *S7ParameterWriteVarRequest) Serialize(io 
utils.WriteBuffer) error {
 
                // Array Field (items)
                if m.Items != nil {
+                       io.PushContext("items")
                        for _, _element := range m.Items {
                                _elementErr := _element.Serialize(io)
                                if _elementErr != nil {
                                        return errors.Wrap(_elementErr, "Error 
serializing 'items' field")
                                }
                        }
+                       io.PopContext("items")
                }
 
                io.PopContext("S7ParameterWriteVarRequest")
diff --git 
a/plc4go/internal/plc4go/s7/readwrite/model/S7PayloadReadVarResponse.go 
b/plc4go/internal/plc4go/s7/readwrite/model/S7PayloadReadVarResponse.go
index 2befb92..d2638b1 100644
--- a/plc4go/internal/plc4go/s7/readwrite/model/S7PayloadReadVarResponse.go
+++ b/plc4go/internal/plc4go/s7/readwrite/model/S7PayloadReadVarResponse.go
@@ -140,6 +140,7 @@ func (m *S7PayloadReadVarResponse) Serialize(io 
utils.WriteBuffer) error {
 
                // Array Field (items)
                if m.Items != nil {
+                       io.PushContext("items")
                        itemCount := uint16(len(m.Items))
                        var curItem uint16 = 0
                        for _, _element := range m.Items {
@@ -150,6 +151,7 @@ func (m *S7PayloadReadVarResponse) Serialize(io 
utils.WriteBuffer) error {
                                }
                                curItem++
                        }
+                       io.PopContext("items")
                }
 
                io.PopContext("S7PayloadReadVarResponse")
diff --git a/plc4go/internal/plc4go/s7/readwrite/model/S7PayloadUserData.go 
b/plc4go/internal/plc4go/s7/readwrite/model/S7PayloadUserData.go
index 2e51d6e..13fda9a 100644
--- a/plc4go/internal/plc4go/s7/readwrite/model/S7PayloadUserData.go
+++ b/plc4go/internal/plc4go/s7/readwrite/model/S7PayloadUserData.go
@@ -139,12 +139,14 @@ func (m *S7PayloadUserData) Serialize(io 
utils.WriteBuffer) error {
 
                // Array Field (items)
                if m.Items != nil {
+                       io.PushContext("items")
                        for _, _element := range m.Items {
                                _elementErr := _element.Serialize(io)
                                if _elementErr != nil {
                                        return errors.Wrap(_elementErr, "Error 
serializing 'items' field")
                                }
                        }
+                       io.PopContext("items")
                }
 
                io.PopContext("S7PayloadUserData")
diff --git 
a/plc4go/internal/plc4go/s7/readwrite/model/S7PayloadUserDataItemCpuFunctionReadSzlResponse.go
 
b/plc4go/internal/plc4go/s7/readwrite/model/S7PayloadUserDataItemCpuFunctionReadSzlResponse.go
index 5043e84..3f57b7b 100644
--- 
a/plc4go/internal/plc4go/s7/readwrite/model/S7PayloadUserDataItemCpuFunctionReadSzlResponse.go
+++ 
b/plc4go/internal/plc4go/s7/readwrite/model/S7PayloadUserDataItemCpuFunctionReadSzlResponse.go
@@ -178,12 +178,14 @@ func (m *S7PayloadUserDataItemCpuFunctionReadSzlResponse) 
Serialize(io utils.Wri
 
                // Array Field (items)
                if m.Items != nil {
+                       io.PushContext("items")
                        for _, _element := range m.Items {
                                _elementErr := _element.Serialize(io)
                                if _elementErr != nil {
                                        return errors.Wrap(_elementErr, "Error 
serializing 'items' field")
                                }
                        }
+                       io.PopContext("items")
                }
 
                io.PopContext("S7PayloadUserDataItemCpuFunctionReadSzlResponse")
diff --git 
a/plc4go/internal/plc4go/s7/readwrite/model/S7PayloadWriteVarRequest.go 
b/plc4go/internal/plc4go/s7/readwrite/model/S7PayloadWriteVarRequest.go
index 8fb7a99..e4bbd21 100644
--- a/plc4go/internal/plc4go/s7/readwrite/model/S7PayloadWriteVarRequest.go
+++ b/plc4go/internal/plc4go/s7/readwrite/model/S7PayloadWriteVarRequest.go
@@ -140,6 +140,7 @@ func (m *S7PayloadWriteVarRequest) Serialize(io 
utils.WriteBuffer) error {
 
                // Array Field (items)
                if m.Items != nil {
+                       io.PushContext("items")
                        itemCount := uint16(len(m.Items))
                        var curItem uint16 = 0
                        for _, _element := range m.Items {
@@ -150,6 +151,7 @@ func (m *S7PayloadWriteVarRequest) Serialize(io 
utils.WriteBuffer) error {
                                }
                                curItem++
                        }
+                       io.PopContext("items")
                }
 
                io.PopContext("S7PayloadWriteVarRequest")
diff --git 
a/plc4go/internal/plc4go/s7/readwrite/model/S7PayloadWriteVarResponse.go 
b/plc4go/internal/plc4go/s7/readwrite/model/S7PayloadWriteVarResponse.go
index 920c4ae..8d03bdf 100644
--- a/plc4go/internal/plc4go/s7/readwrite/model/S7PayloadWriteVarResponse.go
+++ b/plc4go/internal/plc4go/s7/readwrite/model/S7PayloadWriteVarResponse.go
@@ -139,12 +139,14 @@ func (m *S7PayloadWriteVarResponse) Serialize(io 
utils.WriteBuffer) error {
 
                // Array Field (items)
                if m.Items != nil {
+                       io.PushContext("items")
                        for _, _element := range m.Items {
                                _elementErr := _element.Serialize(io)
                                if _elementErr != nil {
                                        return errors.Wrap(_elementErr, "Error 
serializing 'items' field")
                                }
                        }
+                       io.PopContext("items")
                }
 
                io.PopContext("S7PayloadWriteVarResponse")
diff --git a/plc4go/internal/plc4go/s7/readwrite/model/S7VarPayloadDataItem.go 
b/plc4go/internal/plc4go/s7/readwrite/model/S7VarPayloadDataItem.go
index 1c9ec13..fc01257 100644
--- a/plc4go/internal/plc4go/s7/readwrite/model/S7VarPayloadDataItem.go
+++ b/plc4go/internal/plc4go/s7/readwrite/model/S7VarPayloadDataItem.go
@@ -178,24 +178,28 @@ func (m *S7VarPayloadDataItem) Serialize(io 
utils.WriteBuffer, lastItem bool) er
 
        // Array Field (data)
        if m.Data != nil {
+               io.PushContext("data")
                for _, _element := range m.Data {
                        _elementErr := io.WriteInt8("", 8, _element)
                        if _elementErr != nil {
                                return errors.Wrap(_elementErr, "Error 
serializing 'data' field")
                        }
                }
+               io.PopContext("data")
        }
 
        // Padding Field (padding)
        {
+               io.PushContext("padding")
                _timesPadding := uint8(utils.InlineIf(lastItem, func() uint16 { 
return uint16(uint8(0)) }, func() uint16 { return 
uint16(uint8(uint8(len(m.Data))) % uint8(uint8(2))) }))
                for ; _timesPadding > 0; _timesPadding-- {
                        _paddingValue := uint8(uint8(0))
-                       _paddingErr := io.WriteUint8("padding", 8, 
(_paddingValue))
+                       _paddingErr := io.WriteUint8("", 8, (_paddingValue))
                        if _paddingErr != nil {
                                return errors.Wrap(_paddingErr, "Error 
serializing 'padding' field")
                        }
                }
+               io.PopContext("padding")
        }
 
        io.PopContext("S7VarPayloadDataItem")
diff --git a/plc4go/internal/plc4go/s7/readwrite/model/SzlDataTreeItem.go 
b/plc4go/internal/plc4go/s7/readwrite/model/SzlDataTreeItem.go
index 177d924..54a487b 100644
--- a/plc4go/internal/plc4go/s7/readwrite/model/SzlDataTreeItem.go
+++ b/plc4go/internal/plc4go/s7/readwrite/model/SzlDataTreeItem.go
@@ -153,12 +153,14 @@ func (m *SzlDataTreeItem) Serialize(io utils.WriteBuffer) 
error {
 
        // Array Field (mlfb)
        if m.Mlfb != nil {
+               io.PushContext("mlfb")
                for _, _element := range m.Mlfb {
                        _elementErr := io.WriteInt8("", 8, _element)
                        if _elementErr != nil {
                                return errors.Wrap(_elementErr, "Error 
serializing 'mlfb' field")
                        }
                }
+               io.PopContext("mlfb")
        }
 
        // Simple Field (moduleTypeId)
diff --git a/plc4go/internal/plc4go/s7/s7Io_test.go 
b/plc4go/internal/plc4go/s7/s7Io_test.go
index 83b9722..4125f75 100644
--- a/plc4go/internal/plc4go/s7/s7Io_test.go
+++ b/plc4go/internal/plc4go/s7/s7Io_test.go
@@ -38,10 +38,11 @@ func TestS7MessageBytes(t *testing.T) {
                debuggable debuggable
        }
        tests := []struct {
-               name       string
-               args       args
-               wantString string
-               wantDump   string
+               name                 string
+               args                 args
+               wantString           string
+               wantStringSerialized string
+               wantDump             string
        }{
                {
                        name: "TPKT Packet with Read var response data",
@@ -106,6 +107,49 @@ func TestS7MessageBytes(t *testing.T) {
 
║╚═══════════════════════════════════════════════════════════════════════════════════════════════════════════════════╝║
 
╚═════════════════════════════════════════════════════════════════════════════════════════════════════════════════════╝
 `,
+                       wantStringSerialized: `
+╔═TPKTPacket═════════════════════════════════════════════════════════════════════════════════════════════════════╗
+║╔═protocolId╗╔═reserved╗╔═len═════╗                                           
                                  ║
+║║  0x03 3   ║║ 0x00 0  ║║0x001d 29║                                           
                                  ║
+║╚═══════════╝╚═════════╝╚═════════╝                                           
                                  ║
+║╔═COTPPacket═══════════════════════════════════════════════════════════════════════════════════════════════════╗║
+║║╔═headerLength╗╔═tpduCode╗╔═COTPPacketData═════╗╔═parameters═════════════════════════════════════════════════╗║║
+║║║   0x05 5    ║║0xf0 240 
║║╔═eot════╗╔═tpduRef╗║║╔═COTPParameter════════════════════════════════════════════╗║║║
+║║╚═════════════╝╚═════════╝║║b0 false║║0x0d 13 
║║║║╔═parameterType╗╔═parameterLength╗╔═COTPParameterTpduSize╗║║║║
+║║                          ║╚════════╝╚════════╝║║║║   0xc0 192   ║║     0x01 
1     ║║   ╔═COTPTpduSize╗    ║║║║║
+║║                          
╚════════════════════╝║║╚══════════════╝╚════════════════╝║   ║   0x0c 12   ║   
 ║║║║║
+║║                                                ║║                           
       ║   ╚═════════════╝    ║║║║║
+║║                                                ║║                           
       ╚══════════════════════╝║║║║
+║║                                                
║╚══════════════════════════════════════════════════════════╝║║║
+║║                                                
╚════════════════════════════════════════════════════════════╝║║
+║║╔═S7Message══════════════════════════════════════════════════════════════════════════════╗
                    ║║
+║║║╔═protocolId╗╔═messageType╗╔═reserved╗╔═tpduReference╗╔═parameterLength╗╔═payloadLength╗║
                    ║║
+║║║║  0x32 50  ║║   0x03 3   ║║0x0000 0 ║║  0x000b 11   ║║    0x0002 2    ║║   
0x0005 5   ║║                    ║║
+║║║╚═══════════╝╚════════════╝╚═════════╝╚══════════════╝╚════════════════╝╚══════════════╝║
                    ║║
+║║║╔═S7MessageResponseData═══╗╔═S7Parameter═════════════════════════════════╗  
            ║                    ║║
+║║║║╔═errorClass╗╔═errorCode╗║║╔═parameterType╗╔═S7ParameterReadVarResponse╗║  
            ║                    ║║
+║║║║║  0x00 0   ║║  0x00 0  ║║║║    0x04 4    ║║        ╔═numItems╗        ║║  
            ║                    ║║
+║║║║╚═══════════╝╚══════════╝║║╚══════════════╝║        ║ 0x04 4  ║        ║║  
            ║                    ║║
+║║║╚═════════════════════════╝║                ║        ╚═════════╝        ║║  
            ║                    ║║
+║║║                           ║                ╚═══════════════════════════╝║  
            ║                    ║║
+║║║                           ╚═════════════════════════════════════════════╝  
            ║                    ║║
+║║║╔═S7Payload══════════════════════════════════════════════════════════════════════════╗
  ║                    ║║
+║║║║╔═S7PayloadReadVarResponse═════════════════════════════════════════════════════════╗║
  ║                    ║║
+║║║║║╔═items══════════════════════════════════════════════════════════════════════════╗║║
  ║                    ║║
+║║║║║║╔═S7VarPayloadDataItem═════════════════════════════════════════════════════════╗║║║
  ║                    ║║
+║║║║║║║╔═DataTransportErrorCode╗╔═DataTransportSize╗╔═dataLength╗╔═data═══╗╔═padding╗║║║║
  ║                    ║║
+║║║║║║║║       0xff 255        ║║      0x03 3      ║║ 0x0001 1  ║║╔══════╗║║   
     ║║║║║  ║                    ║║
+║║║║║║║╚═══════════════════════╝╚══════════════════╝╚═══════════╝║║0x01 
1║║╚════════╝║║║║  ║                    ║║
+║║║║║║║                                                          ║╚══════╝║    
      ║║║║  ║                    ║║
+║║║║║║║                                                          ╚════════╝    
      ║║║║  ║                    ║║
+║║║║║║╚══════════════════════════════════════════════════════════════════════════════╝║║║
  ║                    ║║
+║║║║║╚════════════════════════════════════════════════════════════════════════════════╝║║
  ║                    ║║
+║║║║╚══════════════════════════════════════════════════════════════════════════════════╝║
  ║                    ║║
+║║║╚════════════════════════════════════════════════════════════════════════════════════╝
  ║                    ║║
+║║╚════════════════════════════════════════════════════════════════════════════════════════╝
                    ║║
+║╚══════════════════════════════════════════════════════════════════════════════════════════════════════════════╝║
+╚════════════════════════════════════════════════════════════════════════════════════════════════════════════════╝
+`,
                        wantDump: `
 00|03 00 00 1d 05 f0 0d c0 01 0c '..........'
 10|32 03 00 00 00 0b 00 02 00 05 '2.........'
@@ -119,6 +163,14 @@ func TestS7MessageBytes(t *testing.T) {
                        if got := tt.args.debuggable.String(); got != 
tt.wantString {
                                t.Errorf("String() = '\n%v\n', want '\n%v\n'", 
got, tt.wantString)
                        }
+                       boxWriter := utils.NewBoxedWriteBuffer()
+                       if err := tt.args.debuggable.Serialize(boxWriter); err 
!= nil {
+                               t.Error(err)
+                       }
+                       tt.wantStringSerialized = 
strings.Trim(tt.wantStringSerialized, "\n")
+                       if got := string(boxWriter.GetBox()); got != 
tt.wantStringSerialized {
+                               t.Errorf("Serialize() = '\n%v\n', want 
'\n%v\n'", got, tt.wantStringSerialized)
+                       }
                        buffer := utils.NewWriteBuffer()
                        err := tt.args.debuggable.Serialize(buffer)
                        if err != nil {
@@ -128,13 +180,6 @@ func TestS7MessageBytes(t *testing.T) {
                        if got := utils.Dump(buffer.GetBytes()); 
!reflect.DeepEqual(got, tt.wantDump) {
                                t.Errorf("Serialize() = '\n%v\n', want 
'\n%v\n'", got, tt.wantDump)
                        }
-                       boxWriter := utils.NewBoxedWriteBuffer()
-                       err = tt.args.debuggable.Serialize(boxWriter)
-                       if err != nil {
-                               t.Error(err)
-                       }
-                       // TODO: seems like the boxWriteBuffer is still a WIP 
so we don't assert yet
-                       println(boxWriter.GetBox())
                })
        }
 }
diff --git a/plc4go/internal/plc4go/spi/utils/WriteBufferBoxBased.go 
b/plc4go/internal/plc4go/spi/utils/WriteBufferBoxBased.go
index 1402457..0471f53 100644
--- a/plc4go/internal/plc4go/spi/utils/WriteBufferBoxBased.go
+++ b/plc4go/internal/plc4go/spi/utils/WriteBufferBoxBased.go
@@ -31,14 +31,16 @@ type WriteBufferBoxBased interface {
 
 func NewBoxedWriteBuffer() WriteBufferBoxBased {
        return &boxedWriteBuffer{
-               List:  list.New(),
-               width: 200,
+               List:         list.New(),
+               desiredWidth: 120,
+               currentWidth: 118,
        }
 }
 
 type boxedWriteBuffer struct {
        *list.List
-       width int
+       desiredWidth int
+       currentWidth int
 }
 
 func (b *boxedWriteBuffer) GetBox() AsciiBox {
@@ -47,135 +49,85 @@ func (b *boxedWriteBuffer) GetBox() AsciiBox {
 }
 
 func (b *boxedWriteBuffer) PushContext(logicalName string) error {
+       b.currentWidth -= boxLineOverheat
        b.PushBack(make([]AsciiBox, 0))
        return nil
 }
 
 func (b *boxedWriteBuffer) WriteBit(logicalName string, value bool) error {
-       back := b.Back()
-       b.Remove(back)
-       asciiBoxes := back.Value.([]AsciiBox)
-       asciiBoxes = append(asciiBoxes, BoxAnything(logicalName, value, 
b.width))
-       b.PushBack(asciiBoxes)
+       b.PushBack(BoxAnything(logicalName, value, b.currentWidth))
        return nil
 }
 
 func (b *boxedWriteBuffer) WriteUint8(logicalName string, bitLength uint8, 
value uint8) error {
-       back := b.Back()
-       b.Remove(back)
-       asciiBoxes := back.Value.([]AsciiBox)
-       asciiBoxes = append(asciiBoxes, BoxAnything(logicalName, value, 
b.width))
-       b.PushBack(asciiBoxes)
+       b.PushBack(BoxAnything(logicalName, value, b.currentWidth))
        return nil
 }
 
 func (b *boxedWriteBuffer) WriteUint16(logicalName string, bitLength uint8, 
value uint16) error {
-       back := b.Back()
-       b.Remove(back)
-       asciiBoxes := back.Value.([]AsciiBox)
-       asciiBoxes = append(asciiBoxes, BoxAnything(logicalName, value, 
b.width))
-       b.PushBack(asciiBoxes)
+       b.PushBack(BoxAnything(logicalName, value, b.currentWidth))
        return nil
 }
 
 func (b *boxedWriteBuffer) WriteUint32(logicalName string, bitLength uint8, 
value uint32) error {
-       back := b.Back()
-       b.Remove(back)
-       asciiBoxes := back.Value.([]AsciiBox)
-       asciiBoxes = append(asciiBoxes, BoxAnything(logicalName, value, 
b.width))
-       b.PushBack(asciiBoxes)
+       b.PushBack(BoxAnything(logicalName, value, b.currentWidth))
        return nil
 }
 
 func (b *boxedWriteBuffer) WriteUint64(logicalName string, bitLength uint8, 
value uint64) error {
-       back := b.Back()
-       b.Remove(back)
-       asciiBoxes := back.Value.([]AsciiBox)
-       asciiBoxes = append(asciiBoxes, BoxAnything(logicalName, value, 
b.width))
-       b.PushBack(asciiBoxes)
+       b.PushBack(BoxAnything(logicalName, value, b.currentWidth))
        return nil
 }
 
 func (b *boxedWriteBuffer) WriteInt8(logicalName string, bitLength uint8, 
value int8) error {
-       back := b.Back()
-       b.Remove(back)
-       asciiBoxes := back.Value.([]AsciiBox)
-       asciiBoxes = append(asciiBoxes, BoxAnything(logicalName, value, 
b.width))
-       b.PushBack(asciiBoxes)
+       b.PushBack(BoxAnything(logicalName, value, b.currentWidth))
        return nil
 }
 
 func (b *boxedWriteBuffer) WriteInt16(logicalName string, bitLength uint8, 
value int16) error {
-       back := b.Back()
-       b.Remove(back)
-       asciiBoxes := back.Value.([]AsciiBox)
-       asciiBoxes = append(asciiBoxes, BoxAnything(logicalName, value, 
b.width))
-       b.PushBack(asciiBoxes)
+       b.PushBack(BoxAnything(logicalName, value, b.currentWidth))
        return nil
 }
 
 func (b *boxedWriteBuffer) WriteInt32(logicalName string, bitLength uint8, 
value int32) error {
-       back := b.Back()
-       b.Remove(back)
-       asciiBoxes := back.Value.([]AsciiBox)
-       asciiBoxes = append(asciiBoxes, BoxAnything(logicalName, value, 
b.width))
-       b.PushBack(asciiBoxes)
+       b.PushBack(BoxAnything(logicalName, value, b.currentWidth))
        return nil
 }
 
 func (b *boxedWriteBuffer) WriteInt64(logicalName string, bitLength uint8, 
value int64) error {
-       back := b.Back()
-       b.Remove(back)
-       asciiBoxes := back.Value.([]AsciiBox)
-       asciiBoxes = append(asciiBoxes, BoxAnything(logicalName, value, 
b.width))
-       b.PushBack(asciiBoxes)
+       b.PushBack(BoxAnything(logicalName, value, b.currentWidth))
        return nil
 }
 
 func (b *boxedWriteBuffer) WriteBigInt(logicalName string, bitLength uint8, 
value *big.Int) error {
-       back := b.Back()
-       b.Remove(back)
-       asciiBoxes := back.Value.([]AsciiBox)
-       asciiBoxes = append(asciiBoxes, BoxAnything(logicalName, value, 
b.width))
-       b.PushBack(asciiBoxes)
+       b.PushBack(BoxAnything(logicalName, value, b.currentWidth))
        return nil
 }
 
 func (b *boxedWriteBuffer) WriteFloat32(logicalName string, bitLength uint8, 
value float32) error {
-       back := b.Back()
-       b.Remove(back)
-       asciiBoxes := back.Value.([]AsciiBox)
-       asciiBoxes = append(asciiBoxes, BoxAnything(logicalName, value, 
b.width))
-       b.PushBack(asciiBoxes)
+       b.PushBack(BoxAnything(logicalName, value, b.currentWidth))
        return nil
 }
 
 func (b *boxedWriteBuffer) WriteFloat64(logicalName string, bitLength uint8, 
value float64) error {
-       back := b.Back()
-       b.Remove(back)
-       asciiBoxes := back.Value.([]AsciiBox)
-       asciiBoxes = append(asciiBoxes, BoxAnything(logicalName, value, 
b.width))
-       b.PushBack(asciiBoxes)
+       b.PushBack(BoxAnything(logicalName, value, b.currentWidth))
        return nil
 }
 
 func (b *boxedWriteBuffer) WriteString(logicalName string, bitLength uint8, 
encoding string, value string) error {
-       back := b.Back()
-       b.Remove(back)
-       asciiBoxes := back.Value.([]AsciiBox)
-       asciiBoxes = append(asciiBoxes, BoxAnything(logicalName, value, 
b.width))
-       b.PushBack(asciiBoxes)
+       b.PushBack(BoxAnything(logicalName, value, b.currentWidth))
        return nil
 }
 
 func (b *boxedWriteBuffer) PopContext(logicalName string) error {
+       b.currentWidth += boxLineOverheat
        finalBoxes := make([]AsciiBox, 0)
 findTheBox:
        for back := b.Back(); back != nil; back = b.Back() {
                switch back.Value.(type) {
                case AsciiBox:
                        asciiBox := b.Remove(back).(AsciiBox)
-                       finalBoxes = append(finalBoxes, asciiBox)
+                       finalBoxes = append([]AsciiBox{asciiBox}, finalBoxes...)
                case []AsciiBox:
                        b.Remove(back)
                        asciiBoxes := b.Remove(back).([]AsciiBox)
@@ -185,7 +137,7 @@ findTheBox:
                        panic("We should never reach this point")
                }
        }
-       asciiBox := BoxBox(logicalName, AlignBoxes(finalBoxes, b.width), 0)
+       asciiBox := BoxBox(logicalName, AlignBoxes(finalBoxes, b.currentWidth), 
0)
        b.PushBack(asciiBox)
        return nil
 }
diff --git a/plc4go/internal/plc4go/spi/utils/asciiBox.go 
b/plc4go/internal/plc4go/spi/utils/asciiBox.go
index b4a685d..a0e6dfb 100644
--- a/plc4go/internal/plc4go/spi/utils/asciiBox.go
+++ b/plc4go/internal/plc4go/spi/utils/asciiBox.go
@@ -84,7 +84,7 @@ func BoxString(name string, data string, charWidth int) 
AsciiBox {
 
 func AlignBoxes(boxes []AsciiBox, desiredWidth int) AsciiBox {
        if len(boxes) == 0 {
-               return boxes[0]
+               return ""
        }
        actualWidth := desiredWidth
        for _, box := range boxes {

Reply via email to