Skip to content

Commit

Permalink
feat(codegen/plc4go): added an indirection through the write buffer f…
Browse files Browse the repository at this point in the history
…or complex types.
  • Loading branch information
sruehl committed Jun 13, 2022
1 parent 77ff058 commit 0801492
Show file tree
Hide file tree
Showing 1,804 changed files with 7,613 additions and 7,584 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -1556,7 +1556,7 @@ func (m *${type.name}) Serialize(writeBuffer utils.WriteBuffer) error {
<#if helper.needsVariable(arrayField, "lastItem", true)>
var lastItem bool = curItem == (itemCount - 1)
</#if>
_elementErr := _element.Serialize(writeBuffer)
_elementErr := writeBuffer.WriteSerializable(_element)
</#if>
if _elementErr != nil {
return errors.Wrap(_elementErr, "Error serializing '${arrayField.name}' field")<@emitImport import="github.com/pkg/errors" />
Expand Down Expand Up @@ -1602,7 +1602,7 @@ func (m *${type.name}) Serialize(writeBuffer utils.WriteBuffer) error {
<#else>
// Const field (${constField.name})
${constField.name} := Cast${helper.getLanguageTypeNameForField(field)}(${type.name}_${constField.name?upper_case})
_${constField.name}Err := ${constField.name}.Serialize(writeBuffer)
_${constField.name}Err := writeBuffer.WriteSerializable(${constField.name})
if _${constField.name}Err != nil {
return errors.Wrap(_${constField.name}Err, "Error serializing '${constField.name}' field")<@emitImport import="github.com/pkg/errors" />
}
Expand All @@ -1625,7 +1625,7 @@ func (m *${type.name}) Serialize(writeBuffer utils.WriteBuffer) error {
if pushErr := writeBuffer.PushContext("${namedField.name}"); pushErr != nil {
return errors.Wrap(pushErr, "Error pushing for ${namedField.name}")<@emitImport import="github.com/pkg/errors" />
}
_${discriminatorField.name}Err := ${discriminatorField.name}.Serialize(writeBuffer)
_${discriminatorField.name}Err := writeBuffer.WriteSerializable(${discriminatorField.name})
if popErr := writeBuffer.PopContext("${namedField.name}"); popErr != nil {
return errors.Wrap(popErr, "Error popping for ${namedField.name}")<@emitImport import="github.com/pkg/errors" />
}
Expand Down Expand Up @@ -1708,7 +1708,7 @@ func (m *${type.name}) Serialize(writeBuffer utils.WriteBuffer) error {
return errors.Wrap(pushErr, "Error pushing for ${optionalField.name}")<@emitImport import="github.com/pkg/errors" />
}
${optionalField.name} = m.${optionalField.name?cap_first}
_${optionalField.name}Err := ${optionalField.name}.Serialize(writeBuffer)
_${optionalField.name}Err := writeBuffer.WriteSerializable(${optionalField.name})
if popErr := writeBuffer.PopContext("${optionalField.name}"); popErr != nil {
return errors.Wrap(popErr, "Error popping for ${optionalField.name}")<@emitImport import="github.com/pkg/errors" />
}
Expand Down Expand Up @@ -1770,7 +1770,7 @@ func (m *${type.name}) Serialize(writeBuffer utils.WriteBuffer) error {
if pushErr := writeBuffer.PushContext("${simpleField.name}"); pushErr != nil {
return errors.Wrap(pushErr, "Error pushing for ${simpleField.name}")<@emitImport import="github.com/pkg/errors" />
}
_${simpleField.name}Err := m.${simpleField.name?cap_first}.Serialize(writeBuffer)
_${simpleField.name}Err := writeBuffer.WriteSerializable(m.${simpleField.name?cap_first})
if popErr := writeBuffer.PopContext("${simpleField.name}"); popErr != nil {
return errors.Wrap(popErr, "Error popping for ${simpleField.name}")<@emitImport import="github.com/pkg/errors" />
}
Expand Down Expand Up @@ -1819,11 +1819,11 @@ func (m *${type.name}) String() string {
if m == nil {
return "<nil>"
}
buffer := utils.NewBoxedWriteBufferWithOptions(true, true)
if err := m.Serialize(buffer); err != nil {
writeBuffer := utils.NewBoxedWriteBufferWithOptions(true, true)
if err := writeBuffer.WriteSerializable(m); err != nil {
return err.Error()
}
return buffer.GetBox().String()
return writeBuffer.GetBox().String()
}

</@importSectionWithContentBelow>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -863,7 +863,7 @@ public<#if type.isDiscriminatedParentTypeDefinition()> abstract</#if> class ${ty
public String toString() {
WriteBufferBoxBased writeBufferBoxBased = new WriteBufferBoxBased(true, true);
try {
serialize(writeBufferBoxBased);
writeBufferBoxBased.writeSerializable(this);
} catch (SerializationException e) {
throw new RuntimeException(e);
}
Expand Down
1 change: 1 addition & 0 deletions plc4go/internal/spi/utils/WriteBuffer.go
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,7 @@ type WriteBuffer interface {
WriteBigFloat(logicalName string, bitLength uint8, value *big.Float, writerArgs ...WithWriterArgs) error
WriteString(logicalName string, bitLength uint32, encoding string, value string, writerArgs ...WithWriterArgs) error
WriteVirtual(logicalName string, value interface{}, writerArgs ...WithWriterArgs) error
WriteSerializable(serializable Serializable) error
// PopContext signals work done with the context with the supplied logical name
PopContext(logicalName string, writerArgs ...WithWriterArgs) error
}
Expand Down
7 changes: 7 additions & 0 deletions plc4go/internal/spi/utils/WriteBufferBoxBased.go
Original file line number Diff line number Diff line change
Expand Up @@ -232,6 +232,13 @@ func (b *boxedWriteBuffer) WriteVirtual(logicalName string, value interface{}, w
return nil
}

func (b *boxedWriteBuffer) WriteSerializable(serializable Serializable) error {
if serializable == nil {
return nil
}
return serializable.Serialize(b)
}

func (b *boxedWriteBuffer) PopContext(logicalName string, _ ...WithWriterArgs) error {
b.currentWidth += boxLineOverheat
finalBoxes := make([]AsciiBox, 0)
Expand Down
7 changes: 7 additions & 0 deletions plc4go/internal/spi/utils/WriteBufferByteBased.go
Original file line number Diff line number Diff line change
Expand Up @@ -244,6 +244,13 @@ func (wb *byteWriteBuffer) WriteVirtual(logicalName string, value interface{}, w
return nil
}

func (wb *byteWriteBuffer) WriteSerializable(serializable Serializable) error {
if serializable == nil {
return nil
}
return serializable.Serialize(wb)
}

func (wb *byteWriteBuffer) PopContext(_ string, _ ...WithWriterArgs) error {
return nil
}
Expand Down
7 changes: 7 additions & 0 deletions plc4go/internal/spi/utils/WriteBufferJsonBased.go
Original file line number Diff line number Diff line change
Expand Up @@ -193,6 +193,13 @@ func (j *jsonWriteBuffer) WriteVirtual(logicalName string, value interface{}, wr
return nil
}

func (j *jsonWriteBuffer) WriteSerializable(serializable Serializable) error {
if serializable == nil {
return nil
}
return serializable.Serialize(j)
}

func (j *jsonWriteBuffer) PopContext(logicalName string, _ ...WithWriterArgs) error {
pop := j.Pop()
var poppedName string
Expand Down
7 changes: 7 additions & 0 deletions plc4go/internal/spi/utils/WriteBufferXmlBased.go
Original file line number Diff line number Diff line change
Expand Up @@ -202,6 +202,13 @@ func (x *xmlWriteBuffer) WriteVirtual(_ string, _ interface{}, _ ...WithWriterAr
return nil
}

func (x *xmlWriteBuffer) WriteSerializable(serializable Serializable) error {
if serializable == nil {
return nil
}
return serializable.Serialize(x)
}

func (x *xmlWriteBuffer) PopContext(logicalName string, _ ...WithWriterArgs) error {
if err := x.Encoder.EncodeToken(xml.EndElement{Name: xml.Name{Local: x.sanitizeLogicalName(logicalName)}}); err != nil {
return err
Expand Down

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 3 additions & 3 deletions plc4go/protocols/abeth/readwrite/model/DF1RequestCommand.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 3 additions & 3 deletions plc4go/protocols/abeth/readwrite/model/DF1RequestMessage.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 3 additions & 3 deletions plc4go/protocols/abeth/readwrite/model/DF1ResponseMessage.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 3 additions & 3 deletions plc4go/protocols/ads/readwrite/model/AdsData.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading

0 comments on commit 0801492

Please sign in to comment.