You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@plc4x.apache.org by sr...@apache.org on 2023/08/01 16:29:54 UTC

[plc4x] 01/02: feat(plc4go/gen): add support for non string keyed maps

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

commit 07130ed03ac441565638f3c4c7c9b91721c8f7e8
Author: Sebastian Rühl <sr...@apache.org>
AuthorDate: Tue Aug 1 18:29:21 2023 +0200

    feat(plc4go/gen): add support for non string keyed maps
---
 plc4go/internal/cbus/Subscriber.go                 |  2 +-
 plc4go/internal/cbus/Subscriber_plc4xgen.go        | 27 ++++++++++++++++++++++
 plc4go/pkg/api/plcDriverManger_plc4xgen.go         |  6 +++--
 plc4go/spi/model/DefaultPlcBrowseItem_plc4xgen.go  |  6 +++--
 .../DefaultPlcBrowseRequestBuilder_plc4xgen.go     |  3 ++-
 .../spi/model/DefaultPlcBrowseRequest_plc4xgen.go  |  3 ++-
 .../spi/model/DefaultPlcBrowseResponse_plc4xgen.go |  3 ++-
 .../spi/model/DefaultPlcDiscoveryItem_plc4xgen.go  |  6 +++--
 .../model/DefaultPlcReadRequestBuilder_plc4xgen.go |  6 +++--
 .../spi/model/DefaultPlcReadResponse_plc4xgen.go   |  3 ++-
 .../model/DefaultPlcSubscriptionEvent_plc4xgen.go  |  3 ++-
 plc4go/spi/model/DefaultPlcSubscriptionRequest.go  |  2 +-
 ...efaultPlcSubscriptionRequestBuilder_plc4xgen.go | 26 +++++++++++++++++----
 .../DefaultPlcSubscriptionRequest_plc4xgen.go      |  6 +++--
 .../DefaultPlcSubscriptionResponse_plc4xgen.go     |  3 ++-
 plc4go/spi/model/DefaultPlcTagRequest_plc4xgen.go  |  3 ++-
 .../DefaultPlcWriteRequestBuilder_plc4xgen.go      |  9 +++++---
 .../spi/model/DefaultPlcWriteRequest_plc4xgen.go   |  3 ++-
 .../spi/model/DefaultPlcWriteResponse_plc4xgen.go  |  3 ++-
 plc4go/tools/plc4xgenerator/gen.go                 | 15 ++++++++----
 20 files changed, 106 insertions(+), 32 deletions(-)

diff --git a/plc4go/internal/cbus/Subscriber.go b/plc4go/internal/cbus/Subscriber.go
index fde8f8bc05..8ca29b091b 100644
--- a/plc4go/internal/cbus/Subscriber.go
+++ b/plc4go/internal/cbus/Subscriber.go
@@ -39,7 +39,7 @@ import (
 
 //go:generate go run ../../tools/plc4xgenerator/gen.go -type=Subscriber
 type Subscriber struct {
-	consumers     map[*spiModel.DefaultPlcConsumerRegistration]apiModel.PlcSubscriptionEventConsumer `ignore:"true"`
+	consumers     map[*spiModel.DefaultPlcConsumerRegistration]apiModel.PlcSubscriptionEventConsumer
 	addSubscriber func(subscriber *Subscriber)
 
 	consumersMutex sync.RWMutex
diff --git a/plc4go/internal/cbus/Subscriber_plc4xgen.go b/plc4go/internal/cbus/Subscriber_plc4xgen.go
index 53bc4edefb..d76c87cf19 100644
--- a/plc4go/internal/cbus/Subscriber_plc4xgen.go
+++ b/plc4go/internal/cbus/Subscriber_plc4xgen.go
@@ -42,6 +42,33 @@ func (d *Subscriber) SerializeWithWriteBuffer(ctx context.Context, writeBuffer u
 	if err := writeBuffer.PushContext("Subscriber"); err != nil {
 		return err
 	}
+	if err := writeBuffer.PushContext("consumers", utils.WithRenderAsList(true)); err != nil {
+		return err
+	}
+	for _name, elem := range d.consumers {
+		name := fmt.Sprintf("%v", _name)
+
+		var elem any = elem
+		if serializable, ok := elem.(utils.Serializable); ok {
+			if err := writeBuffer.PushContext(name); err != nil {
+				return err
+			}
+			if err := serializable.SerializeWithWriteBuffer(ctx, writeBuffer); err != nil {
+				return err
+			}
+			if err := writeBuffer.PopContext(name); err != nil {
+				return err
+			}
+		} else {
+			elemAsString := fmt.Sprintf("%v", elem)
+			if err := writeBuffer.WriteString(name, uint32(len(elemAsString)*8), "UTF-8", elemAsString); err != nil {
+				return err
+			}
+		}
+	}
+	if err := writeBuffer.PopContext("consumers", utils.WithRenderAsList(true)); err != nil {
+		return err
+	}
 
 	if err := writeBuffer.WriteBit("addSubscriber", d.addSubscriber != nil); err != nil {
 		return err
diff --git a/plc4go/pkg/api/plcDriverManger_plc4xgen.go b/plc4go/pkg/api/plcDriverManger_plc4xgen.go
index ca16ab26c9..c1042deddc 100644
--- a/plc4go/pkg/api/plcDriverManger_plc4xgen.go
+++ b/plc4go/pkg/api/plcDriverManger_plc4xgen.go
@@ -45,7 +45,8 @@ func (d *plcDriverManger) SerializeWithWriteBuffer(ctx context.Context, writeBuf
 	if err := writeBuffer.PushContext("drivers", utils.WithRenderAsList(true)); err != nil {
 		return err
 	}
-	for name, elem := range d.drivers {
+	for _name, elem := range d.drivers {
+		name := _name
 		_value := fmt.Sprintf("%v", elem)
 
 		if err := writeBuffer.WriteString(name, uint32(len(_value)*8), "UTF-8", _value); err != nil {
@@ -58,7 +59,8 @@ func (d *plcDriverManger) SerializeWithWriteBuffer(ctx context.Context, writeBuf
 	if err := writeBuffer.PushContext("transports", utils.WithRenderAsList(true)); err != nil {
 		return err
 	}
-	for name, elem := range d.transports {
+	for _name, elem := range d.transports {
+		name := _name
 
 		var elem any = elem
 		if serializable, ok := elem.(utils.Serializable); ok {
diff --git a/plc4go/spi/model/DefaultPlcBrowseItem_plc4xgen.go b/plc4go/spi/model/DefaultPlcBrowseItem_plc4xgen.go
index 65ff4663a5..695569c335 100644
--- a/plc4go/spi/model/DefaultPlcBrowseItem_plc4xgen.go
+++ b/plc4go/spi/model/DefaultPlcBrowseItem_plc4xgen.go
@@ -84,7 +84,8 @@ func (d *DefaultPlcBrowseItem) SerializeWithWriteBuffer(ctx context.Context, wri
 	if err := writeBuffer.PushContext("children", utils.WithRenderAsList(true)); err != nil {
 		return err
 	}
-	for name, elem := range d.Children {
+	for _name, elem := range d.Children {
+		name := _name
 
 		var elem any = elem
 		if serializable, ok := elem.(utils.Serializable); ok {
@@ -110,7 +111,8 @@ func (d *DefaultPlcBrowseItem) SerializeWithWriteBuffer(ctx context.Context, wri
 	if err := writeBuffer.PushContext("options", utils.WithRenderAsList(true)); err != nil {
 		return err
 	}
-	for name, elem := range d.Options {
+	for _name, elem := range d.Options {
+		name := _name
 
 		var elem any = elem
 		if serializable, ok := elem.(utils.Serializable); ok {
diff --git a/plc4go/spi/model/DefaultPlcBrowseRequestBuilder_plc4xgen.go b/plc4go/spi/model/DefaultPlcBrowseRequestBuilder_plc4xgen.go
index a9d69dd885..fa1f0ea27b 100644
--- a/plc4go/spi/model/DefaultPlcBrowseRequestBuilder_plc4xgen.go
+++ b/plc4go/spi/model/DefaultPlcBrowseRequestBuilder_plc4xgen.go
@@ -56,7 +56,8 @@ func (d *DefaultPlcBrowseRequestBuilder) SerializeWithWriteBuffer(ctx context.Co
 	if err := writeBuffer.PushContext("queryStrings", utils.WithRenderAsList(true)); err != nil {
 		return err
 	}
-	for name, elem := range d.queryStrings {
+	for _name, elem := range d.queryStrings {
+		name := _name
 
 		if err := writeBuffer.WriteString(name, uint32(len(elem)*8), "UTF-8", elem); err != nil {
 			return err
diff --git a/plc4go/spi/model/DefaultPlcBrowseRequest_plc4xgen.go b/plc4go/spi/model/DefaultPlcBrowseRequest_plc4xgen.go
index 6f13649df7..307d715789 100644
--- a/plc4go/spi/model/DefaultPlcBrowseRequest_plc4xgen.go
+++ b/plc4go/spi/model/DefaultPlcBrowseRequest_plc4xgen.go
@@ -75,7 +75,8 @@ func (d *DefaultPlcBrowseRequest) SerializeWithWriteBuffer(ctx context.Context,
 	if err := writeBuffer.PushContext("queries", utils.WithRenderAsList(true)); err != nil {
 		return err
 	}
-	for name, elem := range d.queries {
+	for _name, elem := range d.queries {
+		name := _name
 
 		var elem any = elem
 		if serializable, ok := elem.(utils.Serializable); ok {
diff --git a/plc4go/spi/model/DefaultPlcBrowseResponse_plc4xgen.go b/plc4go/spi/model/DefaultPlcBrowseResponse_plc4xgen.go
index e34f01597d..9d59448e32 100644
--- a/plc4go/spi/model/DefaultPlcBrowseResponse_plc4xgen.go
+++ b/plc4go/spi/model/DefaultPlcBrowseResponse_plc4xgen.go
@@ -68,7 +68,8 @@ func (d *DefaultPlcBrowseResponse) SerializeWithWriteBuffer(ctx context.Context,
 	if err := writeBuffer.PushContext("results", utils.WithRenderAsList(true)); err != nil {
 		return err
 	}
-	for name, elem := range d.results {
+	for _name, elem := range d.results {
+		name := _name
 
 		var elem any = elem
 		if serializable, ok := elem.(utils.Serializable); ok {
diff --git a/plc4go/spi/model/DefaultPlcDiscoveryItem_plc4xgen.go b/plc4go/spi/model/DefaultPlcDiscoveryItem_plc4xgen.go
index 64963d9ffd..014ec63b7f 100644
--- a/plc4go/spi/model/DefaultPlcDiscoveryItem_plc4xgen.go
+++ b/plc4go/spi/model/DefaultPlcDiscoveryItem_plc4xgen.go
@@ -53,7 +53,8 @@ func (d *DefaultPlcDiscoveryItem) SerializeWithWriteBuffer(ctx context.Context,
 	if err := writeBuffer.PushContext("options", utils.WithRenderAsList(true)); err != nil {
 		return err
 	}
-	for name, elem := range d.Options {
+	for _name, elem := range d.Options {
+		name := _name
 		_value := fmt.Sprintf("%v", elem)
 
 		if err := writeBuffer.WriteString(name, uint32(len(_value)*8), "UTF-8", _value); err != nil {
@@ -70,7 +71,8 @@ func (d *DefaultPlcDiscoveryItem) SerializeWithWriteBuffer(ctx context.Context,
 	if err := writeBuffer.PushContext("attributes", utils.WithRenderAsList(true)); err != nil {
 		return err
 	}
-	for name, elem := range d.Attributes {
+	for _name, elem := range d.Attributes {
+		name := _name
 
 		var elem any = elem
 		if serializable, ok := elem.(utils.Serializable); ok {
diff --git a/plc4go/spi/model/DefaultPlcReadRequestBuilder_plc4xgen.go b/plc4go/spi/model/DefaultPlcReadRequestBuilder_plc4xgen.go
index 2ae90c109d..a060e54860 100644
--- a/plc4go/spi/model/DefaultPlcReadRequestBuilder_plc4xgen.go
+++ b/plc4go/spi/model/DefaultPlcReadRequestBuilder_plc4xgen.go
@@ -56,7 +56,8 @@ func (d *DefaultPlcReadRequestBuilder) SerializeWithWriteBuffer(ctx context.Cont
 	if err := writeBuffer.PushContext("tagAddresses", utils.WithRenderAsList(true)); err != nil {
 		return err
 	}
-	for name, elem := range d.tagAddresses {
+	for _name, elem := range d.tagAddresses {
+		name := _name
 
 		if err := writeBuffer.WriteString(name, uint32(len(elem)*8), "UTF-8", elem); err != nil {
 			return err
@@ -68,7 +69,8 @@ func (d *DefaultPlcReadRequestBuilder) SerializeWithWriteBuffer(ctx context.Cont
 	if err := writeBuffer.PushContext("tags", utils.WithRenderAsList(true)); err != nil {
 		return err
 	}
-	for name, elem := range d.tags {
+	for _name, elem := range d.tags {
+		name := _name
 
 		var elem any = elem
 		if serializable, ok := elem.(utils.Serializable); ok {
diff --git a/plc4go/spi/model/DefaultPlcReadResponse_plc4xgen.go b/plc4go/spi/model/DefaultPlcReadResponse_plc4xgen.go
index 7b1d127788..344b55788a 100644
--- a/plc4go/spi/model/DefaultPlcReadResponse_plc4xgen.go
+++ b/plc4go/spi/model/DefaultPlcReadResponse_plc4xgen.go
@@ -64,7 +64,8 @@ func (d *DefaultPlcReadResponse) SerializeWithWriteBuffer(ctx context.Context, w
 	if err := writeBuffer.PushContext("values", utils.WithRenderAsList(true)); err != nil {
 		return err
 	}
-	for name, elem := range d.values {
+	for _name, elem := range d.values {
+		name := _name
 
 		var elem any = elem
 		if serializable, ok := elem.(utils.Serializable); ok {
diff --git a/plc4go/spi/model/DefaultPlcSubscriptionEvent_plc4xgen.go b/plc4go/spi/model/DefaultPlcSubscriptionEvent_plc4xgen.go
index 347717d86d..91f666fcd4 100644
--- a/plc4go/spi/model/DefaultPlcSubscriptionEvent_plc4xgen.go
+++ b/plc4go/spi/model/DefaultPlcSubscriptionEvent_plc4xgen.go
@@ -45,7 +45,8 @@ func (d *DefaultPlcSubscriptionEvent) SerializeWithWriteBuffer(ctx context.Conte
 	if err := writeBuffer.PushContext("values", utils.WithRenderAsList(true)); err != nil {
 		return err
 	}
-	for name, elem := range d.values {
+	for _name, elem := range d.values {
+		name := _name
 
 		var elem any = elem
 		if serializable, ok := elem.(utils.Serializable); ok {
diff --git a/plc4go/spi/model/DefaultPlcSubscriptionRequest.go b/plc4go/spi/model/DefaultPlcSubscriptionRequest.go
index 55f24ff65e..8e5e9a9eb5 100644
--- a/plc4go/spi/model/DefaultPlcSubscriptionRequest.go
+++ b/plc4go/spi/model/DefaultPlcSubscriptionRequest.go
@@ -38,7 +38,7 @@ type DefaultPlcSubscriptionRequestBuilder struct {
 	tags                   map[string]apiModel.PlcSubscriptionTag
 	types                  map[string]apiModel.PlcSubscriptionType
 	intervals              map[string]time.Duration
-	preRegisteredConsumers map[string][]apiModel.PlcSubscriptionEventConsumer `ignore:"true"`
+	preRegisteredConsumers map[string][]apiModel.PlcSubscriptionEventConsumer
 }
 
 func NewDefaultPlcSubscriptionRequestBuilder(tagHandler spi.PlcTagHandler, valueHandler spi.PlcValueHandler, subscriber spi.PlcSubscriber) apiModel.PlcSubscriptionRequestBuilder {
diff --git a/plc4go/spi/model/DefaultPlcSubscriptionRequestBuilder_plc4xgen.go b/plc4go/spi/model/DefaultPlcSubscriptionRequestBuilder_plc4xgen.go
index 5d94807233..629d0a8fcb 100644
--- a/plc4go/spi/model/DefaultPlcSubscriptionRequestBuilder_plc4xgen.go
+++ b/plc4go/spi/model/DefaultPlcSubscriptionRequestBuilder_plc4xgen.go
@@ -56,7 +56,8 @@ func (d *DefaultPlcSubscriptionRequestBuilder) SerializeWithWriteBuffer(ctx cont
 	if err := writeBuffer.PushContext("tagAddresses", utils.WithRenderAsList(true)); err != nil {
 		return err
 	}
-	for name, elem := range d.tagAddresses {
+	for _name, elem := range d.tagAddresses {
+		name := _name
 
 		if err := writeBuffer.WriteString(name, uint32(len(elem)*8), "UTF-8", elem); err != nil {
 			return err
@@ -68,7 +69,8 @@ func (d *DefaultPlcSubscriptionRequestBuilder) SerializeWithWriteBuffer(ctx cont
 	if err := writeBuffer.PushContext("tags", utils.WithRenderAsList(true)); err != nil {
 		return err
 	}
-	for name, elem := range d.tags {
+	for _name, elem := range d.tags {
+		name := _name
 
 		var elem any = elem
 		if serializable, ok := elem.(utils.Serializable); ok {
@@ -94,7 +96,8 @@ func (d *DefaultPlcSubscriptionRequestBuilder) SerializeWithWriteBuffer(ctx cont
 	if err := writeBuffer.PushContext("types", utils.WithRenderAsList(true)); err != nil {
 		return err
 	}
-	for name, elem := range d.types {
+	for _name, elem := range d.types {
+		name := _name
 
 		var elem any = elem
 		if serializable, ok := elem.(utils.Serializable); ok {
@@ -120,7 +123,8 @@ func (d *DefaultPlcSubscriptionRequestBuilder) SerializeWithWriteBuffer(ctx cont
 	if err := writeBuffer.PushContext("intervals", utils.WithRenderAsList(true)); err != nil {
 		return err
 	}
-	for name, elem := range d.intervals {
+	for _name, elem := range d.intervals {
+		name := _name
 
 		var elem any = elem
 		if serializable, ok := elem.(utils.Serializable); ok {
@@ -143,6 +147,20 @@ func (d *DefaultPlcSubscriptionRequestBuilder) SerializeWithWriteBuffer(ctx cont
 	if err := writeBuffer.PopContext("intervals", utils.WithRenderAsList(true)); err != nil {
 		return err
 	}
+	if err := writeBuffer.PushContext("preRegisteredConsumers", utils.WithRenderAsList(true)); err != nil {
+		return err
+	}
+	for _name, elem := range d.preRegisteredConsumers {
+		name := _name
+		_value := fmt.Sprintf("%v", elem)
+
+		if err := writeBuffer.WriteString(name, uint32(len(_value)*8), "UTF-8", _value); err != nil {
+			return err
+		}
+	}
+	if err := writeBuffer.PopContext("preRegisteredConsumers", utils.WithRenderAsList(true)); err != nil {
+		return err
+	}
 	if err := writeBuffer.PopContext("PlcSubscriptionRequestBuilder"); err != nil {
 		return err
 	}
diff --git a/plc4go/spi/model/DefaultPlcSubscriptionRequest_plc4xgen.go b/plc4go/spi/model/DefaultPlcSubscriptionRequest_plc4xgen.go
index c05822e2bf..e956f3a5d0 100644
--- a/plc4go/spi/model/DefaultPlcSubscriptionRequest_plc4xgen.go
+++ b/plc4go/spi/model/DefaultPlcSubscriptionRequest_plc4xgen.go
@@ -48,7 +48,8 @@ func (d *DefaultPlcSubscriptionRequest) SerializeWithWriteBuffer(ctx context.Con
 	if err := writeBuffer.PushContext("types", utils.WithRenderAsList(true)); err != nil {
 		return err
 	}
-	for name, elem := range d.types {
+	for _name, elem := range d.types {
+		name := _name
 
 		var elem any = elem
 		if serializable, ok := elem.(utils.Serializable); ok {
@@ -74,7 +75,8 @@ func (d *DefaultPlcSubscriptionRequest) SerializeWithWriteBuffer(ctx context.Con
 	if err := writeBuffer.PushContext("intervals", utils.WithRenderAsList(true)); err != nil {
 		return err
 	}
-	for name, elem := range d.intervals {
+	for _name, elem := range d.intervals {
+		name := _name
 
 		var elem any = elem
 		if serializable, ok := elem.(utils.Serializable); ok {
diff --git a/plc4go/spi/model/DefaultPlcSubscriptionResponse_plc4xgen.go b/plc4go/spi/model/DefaultPlcSubscriptionResponse_plc4xgen.go
index 29f23c1933..4568376a19 100644
--- a/plc4go/spi/model/DefaultPlcSubscriptionResponse_plc4xgen.go
+++ b/plc4go/spi/model/DefaultPlcSubscriptionResponse_plc4xgen.go
@@ -64,7 +64,8 @@ func (d *DefaultPlcSubscriptionResponse) SerializeWithWriteBuffer(ctx context.Co
 	if err := writeBuffer.PushContext("values", utils.WithRenderAsList(true)); err != nil {
 		return err
 	}
-	for name, elem := range d.values {
+	for _name, elem := range d.values {
+		name := _name
 
 		var elem any = elem
 		if serializable, ok := elem.(utils.Serializable); ok {
diff --git a/plc4go/spi/model/DefaultPlcTagRequest_plc4xgen.go b/plc4go/spi/model/DefaultPlcTagRequest_plc4xgen.go
index c96fe5e9eb..1be3d59e12 100644
--- a/plc4go/spi/model/DefaultPlcTagRequest_plc4xgen.go
+++ b/plc4go/spi/model/DefaultPlcTagRequest_plc4xgen.go
@@ -45,7 +45,8 @@ func (d *DefaultPlcTagRequest) SerializeWithWriteBuffer(ctx context.Context, wri
 	if err := writeBuffer.PushContext("tags", utils.WithRenderAsList(true)); err != nil {
 		return err
 	}
-	for name, elem := range d.tags {
+	for _name, elem := range d.tags {
+		name := _name
 
 		var elem any = elem
 		if serializable, ok := elem.(utils.Serializable); ok {
diff --git a/plc4go/spi/model/DefaultPlcWriteRequestBuilder_plc4xgen.go b/plc4go/spi/model/DefaultPlcWriteRequestBuilder_plc4xgen.go
index dc5205e71b..4c49ea3c67 100644
--- a/plc4go/spi/model/DefaultPlcWriteRequestBuilder_plc4xgen.go
+++ b/plc4go/spi/model/DefaultPlcWriteRequestBuilder_plc4xgen.go
@@ -56,7 +56,8 @@ func (d *DefaultPlcWriteRequestBuilder) SerializeWithWriteBuffer(ctx context.Con
 	if err := writeBuffer.PushContext("tagAddresses", utils.WithRenderAsList(true)); err != nil {
 		return err
 	}
-	for name, elem := range d.tagAddresses {
+	for _name, elem := range d.tagAddresses {
+		name := _name
 
 		if err := writeBuffer.WriteString(name, uint32(len(elem)*8), "UTF-8", elem); err != nil {
 			return err
@@ -68,7 +69,8 @@ func (d *DefaultPlcWriteRequestBuilder) SerializeWithWriteBuffer(ctx context.Con
 	if err := writeBuffer.PushContext("tags", utils.WithRenderAsList(true)); err != nil {
 		return err
 	}
-	for name, elem := range d.tags {
+	for _name, elem := range d.tags {
+		name := _name
 
 		var elem any = elem
 		if serializable, ok := elem.(utils.Serializable); ok {
@@ -94,7 +96,8 @@ func (d *DefaultPlcWriteRequestBuilder) SerializeWithWriteBuffer(ctx context.Con
 	if err := writeBuffer.PushContext("values", utils.WithRenderAsList(true)); err != nil {
 		return err
 	}
-	for name, elem := range d.values {
+	for _name, elem := range d.values {
+		name := _name
 		_value := fmt.Sprintf("%v", elem)
 
 		if err := writeBuffer.WriteString(name, uint32(len(_value)*8), "UTF-8", _value); err != nil {
diff --git a/plc4go/spi/model/DefaultPlcWriteRequest_plc4xgen.go b/plc4go/spi/model/DefaultPlcWriteRequest_plc4xgen.go
index 306e898538..b1cc945790 100644
--- a/plc4go/spi/model/DefaultPlcWriteRequest_plc4xgen.go
+++ b/plc4go/spi/model/DefaultPlcWriteRequest_plc4xgen.go
@@ -48,7 +48,8 @@ func (d *DefaultPlcWriteRequest) SerializeWithWriteBuffer(ctx context.Context, w
 	if err := writeBuffer.PushContext("values", utils.WithRenderAsList(true)); err != nil {
 		return err
 	}
-	for name, elem := range d.values {
+	for _name, elem := range d.values {
+		name := _name
 
 		var elem any = elem
 		if serializable, ok := elem.(utils.Serializable); ok {
diff --git a/plc4go/spi/model/DefaultPlcWriteResponse_plc4xgen.go b/plc4go/spi/model/DefaultPlcWriteResponse_plc4xgen.go
index 4ddba20792..335c543df0 100644
--- a/plc4go/spi/model/DefaultPlcWriteResponse_plc4xgen.go
+++ b/plc4go/spi/model/DefaultPlcWriteResponse_plc4xgen.go
@@ -64,7 +64,8 @@ func (d *DefaultPlcWriteResponse) SerializeWithWriteBuffer(ctx context.Context,
 	if err := writeBuffer.PushContext("responseCodes", utils.WithRenderAsList(true)); err != nil {
 		return err
 	}
-	for name, elem := range d.responseCodes {
+	for _name, elem := range d.responseCodes {
+		name := _name
 
 		var elem any = elem
 		if serializable, ok := elem.(utils.Serializable); ok {
diff --git a/plc4go/tools/plc4xgenerator/gen.go b/plc4go/tools/plc4xgenerator/gen.go
index bf83a678e4..de4f403d89 100644
--- a/plc4go/tools/plc4xgenerator/gen.go
+++ b/plc4go/tools/plc4xgenerator/gen.go
@@ -347,12 +347,19 @@ func (g *Generator) generate(typeName string) {
 				g.Printf("if err := writeBuffer.PopContext(%s, utils.WithRenderAsList(true)); err != nil {\n\t\treturn err\n\t}\n", fieldNameUntitled)
 			}
 		case *ast.MapType:
-			if ident, ok := fieldType.Key.(*ast.Ident); !ok || ident.Name != "string" {
-				fmt.Printf("Only string types are supported for maps right now")
-			}
 			g.Printf("if err := writeBuffer.PushContext(%s, utils.WithRenderAsList(true)); err != nil {\n\t\treturn err\n\t}\n", fieldNameUntitled)
 			// TODO: we use serializable or strings as we don't want to over-complex this
-			g.Printf("for name, elem := range d.%s {\n", fieldName)
+			g.Printf("for _name, elem := range d.%s {\n", fieldName)
+			if ident, ok := fieldType.Key.(*ast.Ident); !ok || ident.Name != "string" {
+				switch ident.Name {
+				case "uint", "uint8", "uint16", "uint32", "uint64", "int", "int8", "int16", "int32", "int64": // TODO: add other types
+					g.Printf("\t\tname := fmt.Sprintf(\"%s\", _name)\n", "%v")
+				default:
+					g.Printf("\t\tname := fmt.Sprintf(\"%s\", &_name)\n", "%v")
+				}
+			} else {
+				g.Printf("\t\tname := _name\n")
+			}
 			switch eltType := fieldType.Value.(type) {
 			case *ast.StarExpr, *ast.SelectorExpr:
 				g.Printf("\n\t\tvar elem any = elem\n")