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 2022/08/30 10:33:04 UTC

[plc4x] 02/03: feat(plc4go/spi): improved output of some types

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 324ef77f3d93ad9e4a25502366ea3e9d13c0937d
Author: Sebastian Rühl <sr...@apache.org>
AuthorDate: Tue Aug 30 12:32:12 2022 +0200

    feat(plc4go/spi): improved output of some types
---
 plc4go/spi/default/DefaultCodec.go           |  2 +-
 plc4go/spi/model/DefaultPlcBrowseResponse.go | 52 ++++++++++++++++++++++++
 plc4go/spi/model/DefaultRequest.go           | 60 +++++++++++++++++++++++++++-
 plc4go/spi/model/DefaultResponse.go          | 41 ++++++++++++++++++-
 4 files changed, 152 insertions(+), 3 deletions(-)

diff --git a/plc4go/spi/default/DefaultCodec.go b/plc4go/spi/default/DefaultCodec.go
index 25937d8a5..ec70c0ef9 100644
--- a/plc4go/spi/default/DefaultCodec.go
+++ b/plc4go/spi/default/DefaultCodec.go
@@ -332,7 +332,7 @@ mainLoop:
 				}
 			case <-timeout.C:
 				timeout.Stop()
-				workerLog.Warn().Msgf("Message discarded %s", message)
+				workerLog.Warn().Msgf("Message discarded\n%s", message)
 			}
 		}
 	}
diff --git a/plc4go/spi/model/DefaultPlcBrowseResponse.go b/plc4go/spi/model/DefaultPlcBrowseResponse.go
index 4bc37e2b3..36c19c9e9 100644
--- a/plc4go/spi/model/DefaultPlcBrowseResponse.go
+++ b/plc4go/spi/model/DefaultPlcBrowseResponse.go
@@ -21,6 +21,8 @@ package model
 
 import (
 	"github.com/apache/plc4x/plc4go/pkg/api/model"
+	"github.com/apache/plc4x/plc4go/spi/utils"
+	"github.com/pkg/errors"
 )
 
 type DefaultPlcBrowseResponse struct {
@@ -63,3 +65,53 @@ func (d DefaultPlcBrowseResponse) GetQueryNames() []string {
 func (d DefaultPlcBrowseResponse) GetQueryResults(queryName string) []model.PlcBrowseFoundField {
 	return d.results[queryName]
 }
+
+func (d DefaultPlcBrowseResponse) Serialize(writeBuffer utils.WriteBuffer) error {
+	if err := writeBuffer.PushContext("PlcBrowseResponse"); err != nil {
+		return err
+	}
+
+	if serializableRequest, ok := d.request.(utils.Serializable); ok {
+		if err := serializableRequest.Serialize(writeBuffer); err != nil {
+			return err
+		}
+	} else {
+		return errors.Errorf("Error serializing. Request %T doesn't implement Serializable", d.request)
+	}
+
+	if err := writeBuffer.PushContext("results"); err != nil {
+		return err
+	}
+	for fieldName, foundFields := range d.results {
+		if err := writeBuffer.PushContext(fieldName); err != nil {
+			return err
+		}
+		for _, field := range foundFields {
+			if serializableField, ok := field.(utils.Serializable); ok {
+				if err := serializableField.Serialize(writeBuffer); err != nil {
+					return err
+				}
+			} else {
+				return errors.Errorf("Error serializing. Field %T doesn't implement Serializable", field)
+			}
+		}
+		if err := writeBuffer.PopContext(fieldName); err != nil {
+			return err
+		}
+	}
+	if err := writeBuffer.PopContext("results"); err != nil {
+		return err
+	}
+	if err := writeBuffer.PopContext("PlcBrowseResponse"); err != nil {
+		return err
+	}
+	return nil
+}
+
+func (d DefaultPlcBrowseResponse) String() string {
+	writeBuffer := utils.NewWriteBufferBoxBasedWithOptions(true, true)
+	if err := writeBuffer.WriteSerializable(d); err != nil {
+		return err.Error()
+	}
+	return writeBuffer.GetBox().String()
+}
diff --git a/plc4go/spi/model/DefaultRequest.go b/plc4go/spi/model/DefaultRequest.go
index ce1993b4d..5f8263874 100644
--- a/plc4go/spi/model/DefaultRequest.go
+++ b/plc4go/spi/model/DefaultRequest.go
@@ -19,7 +19,11 @@
 
 package model
 
-import "github.com/apache/plc4x/plc4go/pkg/api/model"
+import (
+	"fmt"
+	"github.com/apache/plc4x/plc4go/pkg/api/model"
+	"github.com/apache/plc4x/plc4go/spi/utils"
+)
 
 type DefaultRequest struct {
 	fields     map[string]model.PlcField
@@ -44,3 +48,57 @@ func (m DefaultRequest) GetField(name string) model.PlcField {
 	}
 	return nil
 }
+
+func (m DefaultRequest) Serialize(writeBuffer utils.WriteBuffer) error {
+	if err := writeBuffer.PushContext("Request"); err != nil {
+		return err
+	}
+
+	if err := writeBuffer.PushContext("fields"); err != nil {
+		return err
+	}
+	for fieldName, field := range m.fields {
+		if serializableField, ok := field.(utils.Serializable); ok {
+			if err := writeBuffer.PushContext(fieldName); err != nil {
+				return err
+			}
+			if err := serializableField.Serialize(writeBuffer); err != nil {
+				return err
+			}
+			if err := writeBuffer.PopContext(fieldName); err != nil {
+				return err
+			}
+		} else {
+			fieldString := fmt.Sprintf("%v", field)
+			if err := writeBuffer.WriteString(fieldName, uint32(len(fieldString)*8), "UTF-8", fieldString); err != nil {
+				return err
+			}
+		}
+	}
+	if err := writeBuffer.PopContext("fields"); err != nil {
+		return err
+	}
+	if err := writeBuffer.PushContext("fieldNames"); err != nil {
+		return err
+	}
+	for _, name := range m.fieldNames {
+		if err := writeBuffer.WriteString("value", uint32(len(name)*8), "UTF-8", name); err != nil {
+			return err
+		}
+	}
+	if err := writeBuffer.PopContext("fieldNames"); err != nil {
+		return err
+	}
+	if err := writeBuffer.PopContext("Request"); err != nil {
+		return err
+	}
+	return nil
+}
+
+func (m DefaultRequest) String() string {
+	writeBuffer := utils.NewWriteBufferBoxBasedWithOptions(true, true)
+	if err := writeBuffer.WriteSerializable(m); err != nil {
+		return err.Error()
+	}
+	return writeBuffer.GetBox().String()
+}
diff --git a/plc4go/spi/model/DefaultResponse.go b/plc4go/spi/model/DefaultResponse.go
index 2d3ff5666..8df022127 100644
--- a/plc4go/spi/model/DefaultResponse.go
+++ b/plc4go/spi/model/DefaultResponse.go
@@ -19,7 +19,10 @@
 
 package model
 
-import "github.com/apache/plc4x/plc4go/pkg/api/model"
+import (
+	"github.com/apache/plc4x/plc4go/pkg/api/model"
+	"github.com/apache/plc4x/plc4go/spi/utils"
+)
 
 type DefaultResponse struct {
 	responseCodes map[string]model.PlcResponseCode
@@ -36,3 +39,39 @@ func (m DefaultResponse) GetResponseCode(name string) model.PlcResponseCode {
 func NewDefaultResponse(responseCodes map[string]model.PlcResponseCode) DefaultResponse {
 	return DefaultResponse{responseCodes}
 }
+
+func (m DefaultResponse) Serialize(writeBuffer utils.WriteBuffer) error {
+	if err := writeBuffer.PushContext("Response"); err != nil {
+		return err
+	}
+
+	if err := writeBuffer.PushContext("responseCodes"); err != nil {
+		return err
+	}
+	for fieldName, code := range m.responseCodes {
+		if err := writeBuffer.PushContext(fieldName); err != nil {
+			return err
+		}
+		if err := writeBuffer.WriteUint8("code", 8, uint8(code), utils.WithAdditionalStringRepresentation(code.String())); err != nil {
+			return err
+		}
+		if err := writeBuffer.PopContext(fieldName); err != nil {
+			return err
+		}
+	}
+	if err := writeBuffer.PopContext("responseCodes"); err != nil {
+		return err
+	}
+	if err := writeBuffer.PopContext("Response"); err != nil {
+		return err
+	}
+	return nil
+}
+
+func (m DefaultResponse) String() string {
+	writeBuffer := utils.NewWriteBufferBoxBasedWithOptions(true, true)
+	if err := writeBuffer.WriteSerializable(m); err != nil {
+		return err.Error()
+	}
+	return writeBuffer.GetBox().String()
+}