Skip to content

Commit

Permalink
feat(plc4go/spi): improved output of some types
Browse files Browse the repository at this point in the history
  • Loading branch information
sruehl committed Aug 30, 2022
1 parent 43f4b87 commit 324ef77
Show file tree
Hide file tree
Showing 4 changed files with 152 additions and 3 deletions.
2 changes: 1 addition & 1 deletion plc4go/spi/default/DefaultCodec.go
Original file line number Diff line number Diff line change
Expand Up @@ -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)
}
}
}
Expand Down
52 changes: 52 additions & 0 deletions plc4go/spi/model/DefaultPlcBrowseResponse.go
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand Down Expand Up @@ -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()
}
60 changes: 59 additions & 1 deletion plc4go/spi/model/DefaultRequest.go
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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()
}
41 changes: 40 additions & 1 deletion plc4go/spi/model/DefaultResponse.go
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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()
}

0 comments on commit 324ef77

Please sign in to comment.