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/11/02 09:23:40 UTC
[plc4x] branch develop updated: refactor(plc4go/spi): converted WriteBufferByteBased options to proper options
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 e383adc49 refactor(plc4go/spi): converted WriteBufferByteBased options to proper options
e383adc49 is described below
commit e383adc494cea6f57d2b7e55c4cbe9da617c970f
Author: Sebastian Rühl <sr...@apache.org>
AuthorDate: Wed Nov 2 10:23:32 2022 +0100
refactor(plc4go/spi): converted WriteBufferByteBased options to proper options
---
plc4go/internal/ads/MessageCodec.go | 3 +-
plc4go/internal/ads/Writer.go | 3 +-
plc4go/internal/eip/MessageCodec.go | 3 +-
plc4go/internal/eip/Reader.go | 3 +-
plc4go/internal/eip/Writer.go | 3 +-
plc4go/spi/MessageCodec.go | 2 +-
plc4go/spi/testutils/DriverTestRunner.go | 4 +--
plc4go/spi/testutils/ParserSerializerTestRunner.go | 2 +-
plc4go/spi/utils/WriteBufferByteBased.go | 35 ++++++++++++----------
9 files changed, 34 insertions(+), 24 deletions(-)
diff --git a/plc4go/internal/ads/MessageCodec.go b/plc4go/internal/ads/MessageCodec.go
index 4eb6909bf..a5574a20d 100644
--- a/plc4go/internal/ads/MessageCodec.go
+++ b/plc4go/internal/ads/MessageCodec.go
@@ -20,6 +20,7 @@
package ads
import (
+ "encoding/binary"
"github.com/apache/plc4x/plc4go/protocols/ads/readwrite/model"
"github.com/apache/plc4x/plc4go/spi"
"github.com/apache/plc4x/plc4go/spi/default"
@@ -48,7 +49,7 @@ func (m *MessageCodec) Send(message spi.Message) error {
// Cast the message to the correct type of struct
tcpPaket := message.(model.AmsTCPPacket)
// Serialize the request
- wb := utils.NewLittleEndianWriteBufferByteBased()
+ wb := utils.NewWriteBufferByteBased(utils.WithByteOrderForByteBasedBuffer(binary.LittleEndian))
err := tcpPaket.Serialize(wb)
if err != nil {
return errors.Wrap(err, "error serializing request")
diff --git a/plc4go/internal/ads/Writer.go b/plc4go/internal/ads/Writer.go
index ca76a62fd..9af8af02b 100644
--- a/plc4go/internal/ads/Writer.go
+++ b/plc4go/internal/ads/Writer.go
@@ -21,6 +21,7 @@ package ads
import (
"context"
+ "encoding/binary"
"github.com/apache/plc4x/plc4go/pkg/api/model"
readWriteModel "github.com/apache/plc4x/plc4go/protocols/ads/readwrite/model"
"github.com/apache/plc4x/plc4go/spi"
@@ -105,7 +106,7 @@ func (m *Writer) Write(ctx context.Context, writeRequest model.PlcWriteRequest)
// Get the value from the request and serialize it to a byte array
value := writeRequest.GetValue(fieldName)
- io := utils.NewLittleEndianWriteBufferByteBased()
+ io := utils.NewWriteBufferByteBased(utils.WithByteOrderForByteBasedBuffer(binary.LittleEndian))
if err := readWriteModel.DataItemSerialize(io, value, adsField.Datatype.PlcValueType(), adsField.StringLength); err != nil {
result <- &plc4goModel.DefaultPlcWriteRequestResult{
Request: writeRequest,
diff --git a/plc4go/internal/eip/MessageCodec.go b/plc4go/internal/eip/MessageCodec.go
index 421845329..4e701cf1f 100644
--- a/plc4go/internal/eip/MessageCodec.go
+++ b/plc4go/internal/eip/MessageCodec.go
@@ -20,6 +20,7 @@
package eip
import (
+ "encoding/binary"
"github.com/apache/plc4x/plc4go/protocols/eip/readwrite/model"
"github.com/apache/plc4x/plc4go/spi"
"github.com/apache/plc4x/plc4go/spi/default"
@@ -48,7 +49,7 @@ func (m *MessageCodec) Send(message spi.Message) error {
// Cast the message to the correct type of struct
eipPacket := message.(model.EipPacket)
// Serialize the request
- wb := utils.NewLittleEndianWriteBufferByteBased()
+ wb := utils.NewWriteBufferByteBased(utils.WithByteOrderForByteBasedBuffer(binary.LittleEndian))
err := eipPacket.Serialize(wb)
if err != nil {
return errors.Wrap(err, "error serializing request")
diff --git a/plc4go/internal/eip/Reader.go b/plc4go/internal/eip/Reader.go
index f20058abb..58eee7bc9 100644
--- a/plc4go/internal/eip/Reader.go
+++ b/plc4go/internal/eip/Reader.go
@@ -21,6 +21,7 @@ package eip
import (
"context"
+ "encoding/binary"
"github.com/apache/plc4x/plc4go/pkg/api/model"
"github.com/apache/plc4x/plc4go/pkg/api/values"
readWriteModel "github.com/apache/plc4x/plc4go/protocols/eip/readwrite/model"
@@ -316,7 +317,7 @@ func toAnsi(tag string) ([]byte, error) {
}
}
- buffer := utils.NewLittleEndianWriteBufferByteBased()
+ buffer := utils.NewWriteBufferByteBased(utils.WithByteOrderForByteBasedBuffer(binary.LittleEndian))
err := buffer.WriteByte("", 0x91)
if err != nil {
diff --git a/plc4go/internal/eip/Writer.go b/plc4go/internal/eip/Writer.go
index 86101cedf..6dfd587e8 100644
--- a/plc4go/internal/eip/Writer.go
+++ b/plc4go/internal/eip/Writer.go
@@ -21,6 +21,7 @@ package eip
import (
"context"
+ "encoding/binary"
"github.com/apache/plc4x/plc4go/pkg/api/model"
"github.com/apache/plc4x/plc4go/pkg/api/values"
readWriteModel "github.com/apache/plc4x/plc4go/protocols/eip/readwrite/model"
@@ -276,7 +277,7 @@ func (m Writer) Write(ctx context.Context, writeRequest model.PlcWriteRequest) <
}
func encodeValue(value values.PlcValue, _type readWriteModel.CIPDataTypeCode, elements uint16) ([]byte, error) {
- buffer := utils.NewLittleEndianWriteBufferByteBased()
+ buffer := utils.NewWriteBufferByteBased(utils.WithByteOrderForByteBasedBuffer(binary.LittleEndian))
switch _type {
case readWriteModel.CIPDataTypeCode_SINT:
err := buffer.WriteByte("", value.GetUint8())
diff --git a/plc4go/spi/MessageCodec.go b/plc4go/spi/MessageCodec.go
index 2e373ed4a..f757c0a60 100644
--- a/plc4go/spi/MessageCodec.go
+++ b/plc4go/spi/MessageCodec.go
@@ -50,7 +50,7 @@ type MessageCodec interface {
ConnectWithContext(ctx context.Context) error
// Disconnect disconnects this codec
Disconnect() error
- // IsRunning returns tur if the codec (workers are running)
+ // IsRunning returns true if the codec (workers are running)
IsRunning() bool
// Send is sending a given message
diff --git a/plc4go/spi/testutils/DriverTestRunner.go b/plc4go/spi/testutils/DriverTestRunner.go
index 7604c3adb..9d245341c 100644
--- a/plc4go/spi/testutils/DriverTestRunner.go
+++ b/plc4go/spi/testutils/DriverTestRunner.go
@@ -285,7 +285,7 @@ func (m DriverTestsuite) ExecuteStep(connection plc4go.PlcConnection, testcase *
if m.byteOrder == binary.BigEndian {
expectedWriteBuffer = utils.NewWriteBufferByteBased()
} else {
- expectedWriteBuffer = utils.NewLittleEndianWriteBufferByteBased()
+ expectedWriteBuffer = utils.NewWriteBufferByteBased(utils.WithByteOrderForByteBasedBuffer(binary.LittleEndian))
}
err = expectedSerializable.Serialize(expectedWriteBuffer)
if err != nil {
@@ -371,7 +371,7 @@ func (m DriverTestsuite) ExecuteStep(connection plc4go.PlcConnection, testcase *
if m.byteOrder == binary.BigEndian {
wb = utils.NewWriteBufferByteBased()
} else {
- wb = utils.NewLittleEndianWriteBufferByteBased()
+ wb = utils.NewWriteBufferByteBased(utils.WithByteOrderForByteBasedBuffer(binary.LittleEndian))
}
err = expectedSerializable.Serialize(wb)
if err != nil {
diff --git a/plc4go/spi/testutils/ParserSerializerTestRunner.go b/plc4go/spi/testutils/ParserSerializerTestRunner.go
index 4c4b20ed4..e8827c690 100644
--- a/plc4go/spi/testutils/ParserSerializerTestRunner.go
+++ b/plc4go/spi/testutils/ParserSerializerTestRunner.go
@@ -214,7 +214,7 @@ func RunParserSerializerTestsuite(t *testing.T, testPath string, skippedTestCase
}
var writeBuffer utils.WriteBufferByteBased
if byteOrder == binary.LittleEndian {
- writeBuffer = utils.NewLittleEndianWriteBufferByteBased()
+ writeBuffer = utils.NewWriteBufferByteBased(utils.WithByteOrderForByteBasedBuffer(binary.LittleEndian))
} else {
writeBuffer = utils.NewWriteBufferByteBased()
}
diff --git a/plc4go/spi/utils/WriteBufferByteBased.go b/plc4go/spi/utils/WriteBufferByteBased.go
index 8effab5dd..4af268216 100644
--- a/plc4go/spi/utils/WriteBufferByteBased.go
+++ b/plc4go/spi/utils/WriteBufferByteBased.go
@@ -35,32 +35,37 @@ type WriteBufferByteBased interface {
GetTotalBytes() uint64
}
-func NewWriteBufferByteBased() WriteBufferByteBased {
+func NewWriteBufferByteBased(options ...WriteBufferByteBasedOptions) WriteBufferByteBased {
data := new(bytes.Buffer)
writer := bitio.NewWriter(data)
- return &byteWriteBuffer{
+ b := &byteWriteBuffer{
data: data,
writer: writer,
byteOrder: binary.BigEndian,
}
+ for _, option := range options {
+ option(b)
+ }
+ return b
}
-func NewLittleEndianWriteBufferByteBased() WriteBufferByteBased {
- data := new(bytes.Buffer)
- writer := bitio.NewWriter(data)
- return &byteWriteBuffer{
- data: data,
- writer: writer,
- byteOrder: binary.LittleEndian,
+type WriteBufferByteBasedOptions = func(b *byteWriteBuffer)
+
+func WithInitialSizeForByteBasedBuffer(length int) WriteBufferByteBasedOptions {
+ return func(b *byteWriteBuffer) {
+ b.data = bytes.NewBuffer(make([]byte, length))
}
}
-func NewCustomWriteBufferByteBased(buffer *bytes.Buffer, byteOrder binary.ByteOrder) WriteBufferByteBased {
- writer := bitio.NewWriter(buffer)
- return &byteWriteBuffer{
- data: buffer,
- writer: writer,
- byteOrder: byteOrder,
+func WithByteOrderForByteBasedBuffer(byteOrder binary.ByteOrder) WriteBufferByteBasedOptions {
+ return func(b *byteWriteBuffer) {
+ b.byteOrder = byteOrder
+ }
+}
+
+func WithCustomBufferForByteBasedBuffer(buffer *bytes.Buffer) WriteBufferByteBasedOptions {
+ return func(b *byteWriteBuffer) {
+ b.data = buffer
}
}