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/06/19 13:50:58 UTC
[plc4x] 03/05: fix(plc4go/tools): fix atomic.Pointer support
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 7089ac3b584ba7fd776905c8ed29d9eaa4a59eb4
Author: Sebastian Rühl <sr...@apache.org>
AuthorDate: Mon Jun 19 15:45:00 2023 +0200
fix(plc4go/tools): fix atomic.Pointer support
---
plc4go/tools/plc4xgenerator/gen.go | 24 +++++++++++++++++++++++-
1 file changed, 23 insertions(+), 1 deletion(-)
diff --git a/plc4go/tools/plc4xgenerator/gen.go b/plc4go/tools/plc4xgenerator/gen.go
index 3644e4ceca..54ceab6101 100644
--- a/plc4go/tools/plc4xgenerator/gen.go
+++ b/plc4go/tools/plc4xgenerator/gen.go
@@ -284,7 +284,7 @@ func (g *Generator) generate(typeName string) {
xIdent, xIsIdent := fieldType.X.(*ast.Ident)
sel := fieldType.Sel
if xIsIdent && xIdent.Name == "atomic" && sel.Name == "Pointer" {
- g.Printf(serializableFieldTemplate, "(*d."+field.name+".Load())", fieldNameUntitled)
+ g.Printf(atomicPointerFieldTemplate, "d."+field.name, field.name, fieldNameUntitled)
continue
}
}
@@ -556,6 +556,28 @@ var serializableFieldTemplate = `
}
`
+var atomicPointerFieldTemplate = `
+ if %[2]sLoaded :=%[1]s.Load(); %[2]sLoaded != nil && *%[2]sLoaded != nil {
+ %[2]s := *%[2]sLoaded
+ if serializableField, ok := %[2]s.(utils.Serializable); ok {
+ if err := writeBuffer.PushContext(%[3]s); err != nil {
+ return err
+ }
+ if err := serializableField.SerializeWithWriteBuffer(ctx, writeBuffer); err != nil {
+ return err
+ }
+ if err := writeBuffer.PopContext(%[3]s); err != nil {
+ return err
+ }
+ } else {
+ stringValue := fmt.Sprintf("%%v", %[2]s)
+ if err := writeBuffer.WriteString(%[3]s, uint32(len(stringValue)*8), "UTF-8", stringValue); err != nil {
+ return err
+ }
+ }
+ }
+`
+
var byteFieldSerialize = `
if err := writeBuffer.WriteByte(%[2]s, %[1]s); err != nil {
return err