plc4go/protocols/bacnetip/readwrite/model/APDUConfirmedRequest.go (505 lines of code) (raw):
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package model
import (
"context"
"fmt"
"github.com/pkg/errors"
"github.com/rs/zerolog"
. "github.com/apache/plc4x/plc4go/spi/codegen/fields"
. "github.com/apache/plc4x/plc4go/spi/codegen/io"
"github.com/apache/plc4x/plc4go/spi/utils"
)
// Code generated by code-generation. DO NOT EDIT.
// APDUConfirmedRequest is the corresponding interface of APDUConfirmedRequest
type APDUConfirmedRequest interface {
fmt.Stringer
utils.LengthAware
utils.Serializable
utils.Copyable
APDU
// GetSegmentedMessage returns SegmentedMessage (property field)
GetSegmentedMessage() bool
// GetMoreFollows returns MoreFollows (property field)
GetMoreFollows() bool
// GetSegmentedResponseAccepted returns SegmentedResponseAccepted (property field)
GetSegmentedResponseAccepted() bool
// GetMaxSegmentsAccepted returns MaxSegmentsAccepted (property field)
GetMaxSegmentsAccepted() MaxSegmentsAccepted
// GetMaxApduLengthAccepted returns MaxApduLengthAccepted (property field)
GetMaxApduLengthAccepted() MaxApduLengthAccepted
// GetInvokeId returns InvokeId (property field)
GetInvokeId() uint8
// GetSequenceNumber returns SequenceNumber (property field)
GetSequenceNumber() *uint8
// GetProposedWindowSize returns ProposedWindowSize (property field)
GetProposedWindowSize() *uint8
// GetServiceRequest returns ServiceRequest (property field)
GetServiceRequest() BACnetConfirmedServiceRequest
// GetSegmentServiceChoice returns SegmentServiceChoice (property field)
GetSegmentServiceChoice() *BACnetConfirmedServiceChoice
// GetSegment returns Segment (property field)
GetSegment() []byte
// GetApduHeaderReduction returns ApduHeaderReduction (virtual field)
GetApduHeaderReduction() uint16
// GetSegmentReduction returns SegmentReduction (virtual field)
GetSegmentReduction() uint16
// IsAPDUConfirmedRequest is a marker method to prevent unintentional type checks (interfaces of same signature)
IsAPDUConfirmedRequest()
// CreateBuilder creates a APDUConfirmedRequestBuilder
CreateAPDUConfirmedRequestBuilder() APDUConfirmedRequestBuilder
}
// _APDUConfirmedRequest is the data-structure of this message
type _APDUConfirmedRequest struct {
APDUContract
SegmentedMessage bool
MoreFollows bool
SegmentedResponseAccepted bool
MaxSegmentsAccepted MaxSegmentsAccepted
MaxApduLengthAccepted MaxApduLengthAccepted
InvokeId uint8
SequenceNumber *uint8
ProposedWindowSize *uint8
ServiceRequest BACnetConfirmedServiceRequest
SegmentServiceChoice *BACnetConfirmedServiceChoice
Segment []byte
// Reserved Fields
reservedField0 *uint8
}
var _ APDUConfirmedRequest = (*_APDUConfirmedRequest)(nil)
var _ APDURequirements = (*_APDUConfirmedRequest)(nil)
// NewAPDUConfirmedRequest factory function for _APDUConfirmedRequest
func NewAPDUConfirmedRequest(segmentedMessage bool, moreFollows bool, segmentedResponseAccepted bool, maxSegmentsAccepted MaxSegmentsAccepted, maxApduLengthAccepted MaxApduLengthAccepted, invokeId uint8, sequenceNumber *uint8, proposedWindowSize *uint8, serviceRequest BACnetConfirmedServiceRequest, segmentServiceChoice *BACnetConfirmedServiceChoice, segment []byte, apduLength uint16) *_APDUConfirmedRequest {
_result := &_APDUConfirmedRequest{
APDUContract: NewAPDU(apduLength),
SegmentedMessage: segmentedMessage,
MoreFollows: moreFollows,
SegmentedResponseAccepted: segmentedResponseAccepted,
MaxSegmentsAccepted: maxSegmentsAccepted,
MaxApduLengthAccepted: maxApduLengthAccepted,
InvokeId: invokeId,
SequenceNumber: sequenceNumber,
ProposedWindowSize: proposedWindowSize,
ServiceRequest: serviceRequest,
SegmentServiceChoice: segmentServiceChoice,
Segment: segment,
}
_result.APDUContract.(*_APDU)._SubType = _result
return _result
}
///////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////
/////////////////////// Builder
///////////////////////
// APDUConfirmedRequestBuilder is a builder for APDUConfirmedRequest
type APDUConfirmedRequestBuilder interface {
utils.Copyable
// WithMandatoryFields adds all mandatory fields (convenience for using multiple builder calls)
WithMandatoryFields(segmentedMessage bool, moreFollows bool, segmentedResponseAccepted bool, maxSegmentsAccepted MaxSegmentsAccepted, maxApduLengthAccepted MaxApduLengthAccepted, invokeId uint8, segment []byte) APDUConfirmedRequestBuilder
// WithSegmentedMessage adds SegmentedMessage (property field)
WithSegmentedMessage(bool) APDUConfirmedRequestBuilder
// WithMoreFollows adds MoreFollows (property field)
WithMoreFollows(bool) APDUConfirmedRequestBuilder
// WithSegmentedResponseAccepted adds SegmentedResponseAccepted (property field)
WithSegmentedResponseAccepted(bool) APDUConfirmedRequestBuilder
// WithMaxSegmentsAccepted adds MaxSegmentsAccepted (property field)
WithMaxSegmentsAccepted(MaxSegmentsAccepted) APDUConfirmedRequestBuilder
// WithMaxApduLengthAccepted adds MaxApduLengthAccepted (property field)
WithMaxApduLengthAccepted(MaxApduLengthAccepted) APDUConfirmedRequestBuilder
// WithInvokeId adds InvokeId (property field)
WithInvokeId(uint8) APDUConfirmedRequestBuilder
// WithSequenceNumber adds SequenceNumber (property field)
WithOptionalSequenceNumber(uint8) APDUConfirmedRequestBuilder
// WithProposedWindowSize adds ProposedWindowSize (property field)
WithOptionalProposedWindowSize(uint8) APDUConfirmedRequestBuilder
// WithServiceRequest adds ServiceRequest (property field)
WithOptionalServiceRequest(BACnetConfirmedServiceRequest) APDUConfirmedRequestBuilder
// WithOptionalServiceRequestBuilder adds ServiceRequest (property field) which is build by the builder
WithOptionalServiceRequestBuilder(func(BACnetConfirmedServiceRequestBuilder) BACnetConfirmedServiceRequestBuilder) APDUConfirmedRequestBuilder
// WithSegmentServiceChoice adds SegmentServiceChoice (property field)
WithOptionalSegmentServiceChoice(BACnetConfirmedServiceChoice) APDUConfirmedRequestBuilder
// WithSegment adds Segment (property field)
WithSegment(...byte) APDUConfirmedRequestBuilder
// Done is used to finish work on this child and return (or create one if none) to the parent builder
Done() APDUBuilder
// Build builds the APDUConfirmedRequest or returns an error if something is wrong
Build() (APDUConfirmedRequest, error)
// MustBuild does the same as Build but panics on error
MustBuild() APDUConfirmedRequest
}
// NewAPDUConfirmedRequestBuilder() creates a APDUConfirmedRequestBuilder
func NewAPDUConfirmedRequestBuilder() APDUConfirmedRequestBuilder {
return &_APDUConfirmedRequestBuilder{_APDUConfirmedRequest: new(_APDUConfirmedRequest)}
}
type _APDUConfirmedRequestBuilder struct {
*_APDUConfirmedRequest
parentBuilder *_APDUBuilder
err *utils.MultiError
}
var _ (APDUConfirmedRequestBuilder) = (*_APDUConfirmedRequestBuilder)(nil)
func (b *_APDUConfirmedRequestBuilder) setParent(contract APDUContract) {
b.APDUContract = contract
contract.(*_APDU)._SubType = b._APDUConfirmedRequest
}
func (b *_APDUConfirmedRequestBuilder) WithMandatoryFields(segmentedMessage bool, moreFollows bool, segmentedResponseAccepted bool, maxSegmentsAccepted MaxSegmentsAccepted, maxApduLengthAccepted MaxApduLengthAccepted, invokeId uint8, segment []byte) APDUConfirmedRequestBuilder {
return b.WithSegmentedMessage(segmentedMessage).WithMoreFollows(moreFollows).WithSegmentedResponseAccepted(segmentedResponseAccepted).WithMaxSegmentsAccepted(maxSegmentsAccepted).WithMaxApduLengthAccepted(maxApduLengthAccepted).WithInvokeId(invokeId).WithSegment(segment...)
}
func (b *_APDUConfirmedRequestBuilder) WithSegmentedMessage(segmentedMessage bool) APDUConfirmedRequestBuilder {
b.SegmentedMessage = segmentedMessage
return b
}
func (b *_APDUConfirmedRequestBuilder) WithMoreFollows(moreFollows bool) APDUConfirmedRequestBuilder {
b.MoreFollows = moreFollows
return b
}
func (b *_APDUConfirmedRequestBuilder) WithSegmentedResponseAccepted(segmentedResponseAccepted bool) APDUConfirmedRequestBuilder {
b.SegmentedResponseAccepted = segmentedResponseAccepted
return b
}
func (b *_APDUConfirmedRequestBuilder) WithMaxSegmentsAccepted(maxSegmentsAccepted MaxSegmentsAccepted) APDUConfirmedRequestBuilder {
b.MaxSegmentsAccepted = maxSegmentsAccepted
return b
}
func (b *_APDUConfirmedRequestBuilder) WithMaxApduLengthAccepted(maxApduLengthAccepted MaxApduLengthAccepted) APDUConfirmedRequestBuilder {
b.MaxApduLengthAccepted = maxApduLengthAccepted
return b
}
func (b *_APDUConfirmedRequestBuilder) WithInvokeId(invokeId uint8) APDUConfirmedRequestBuilder {
b.InvokeId = invokeId
return b
}
func (b *_APDUConfirmedRequestBuilder) WithOptionalSequenceNumber(sequenceNumber uint8) APDUConfirmedRequestBuilder {
b.SequenceNumber = &sequenceNumber
return b
}
func (b *_APDUConfirmedRequestBuilder) WithOptionalProposedWindowSize(proposedWindowSize uint8) APDUConfirmedRequestBuilder {
b.ProposedWindowSize = &proposedWindowSize
return b
}
func (b *_APDUConfirmedRequestBuilder) WithOptionalServiceRequest(serviceRequest BACnetConfirmedServiceRequest) APDUConfirmedRequestBuilder {
b.ServiceRequest = serviceRequest
return b
}
func (b *_APDUConfirmedRequestBuilder) WithOptionalServiceRequestBuilder(builderSupplier func(BACnetConfirmedServiceRequestBuilder) BACnetConfirmedServiceRequestBuilder) APDUConfirmedRequestBuilder {
builder := builderSupplier(b.ServiceRequest.CreateBACnetConfirmedServiceRequestBuilder())
var err error
b.ServiceRequest, err = builder.Build()
if err != nil {
if b.err == nil {
b.err = &utils.MultiError{MainError: errors.New("sub builder failed")}
}
b.err.Append(errors.Wrap(err, "BACnetConfirmedServiceRequestBuilder failed"))
}
return b
}
func (b *_APDUConfirmedRequestBuilder) WithOptionalSegmentServiceChoice(segmentServiceChoice BACnetConfirmedServiceChoice) APDUConfirmedRequestBuilder {
b.SegmentServiceChoice = &segmentServiceChoice
return b
}
func (b *_APDUConfirmedRequestBuilder) WithSegment(segment ...byte) APDUConfirmedRequestBuilder {
b.Segment = segment
return b
}
func (b *_APDUConfirmedRequestBuilder) Build() (APDUConfirmedRequest, error) {
if b.err != nil {
return nil, errors.Wrap(b.err, "error occurred during build")
}
return b._APDUConfirmedRequest.deepCopy(), nil
}
func (b *_APDUConfirmedRequestBuilder) MustBuild() APDUConfirmedRequest {
build, err := b.Build()
if err != nil {
panic(err)
}
return build
}
func (b *_APDUConfirmedRequestBuilder) Done() APDUBuilder {
if b.parentBuilder == nil {
b.parentBuilder = NewAPDUBuilder().(*_APDUBuilder)
}
return b.parentBuilder
}
func (b *_APDUConfirmedRequestBuilder) buildForAPDU() (APDU, error) {
return b.Build()
}
func (b *_APDUConfirmedRequestBuilder) DeepCopy() any {
_copy := b.CreateAPDUConfirmedRequestBuilder().(*_APDUConfirmedRequestBuilder)
if b.err != nil {
_copy.err = b.err.DeepCopy().(*utils.MultiError)
}
return _copy
}
// CreateAPDUConfirmedRequestBuilder creates a APDUConfirmedRequestBuilder
func (b *_APDUConfirmedRequest) CreateAPDUConfirmedRequestBuilder() APDUConfirmedRequestBuilder {
if b == nil {
return NewAPDUConfirmedRequestBuilder()
}
return &_APDUConfirmedRequestBuilder{_APDUConfirmedRequest: b.deepCopy()}
}
///////////////////////
///////////////////////
///////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////
/////////////////////// Accessors for discriminator values.
///////////////////////
func (m *_APDUConfirmedRequest) GetApduType() ApduType {
return ApduType_CONFIRMED_REQUEST_PDU
}
///////////////////////
///////////////////////
///////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////
func (m *_APDUConfirmedRequest) GetParent() APDUContract {
return m.APDUContract
}
///////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////
/////////////////////// Accessors for property fields.
///////////////////////
func (m *_APDUConfirmedRequest) GetSegmentedMessage() bool {
return m.SegmentedMessage
}
func (m *_APDUConfirmedRequest) GetMoreFollows() bool {
return m.MoreFollows
}
func (m *_APDUConfirmedRequest) GetSegmentedResponseAccepted() bool {
return m.SegmentedResponseAccepted
}
func (m *_APDUConfirmedRequest) GetMaxSegmentsAccepted() MaxSegmentsAccepted {
return m.MaxSegmentsAccepted
}
func (m *_APDUConfirmedRequest) GetMaxApduLengthAccepted() MaxApduLengthAccepted {
return m.MaxApduLengthAccepted
}
func (m *_APDUConfirmedRequest) GetInvokeId() uint8 {
return m.InvokeId
}
func (m *_APDUConfirmedRequest) GetSequenceNumber() *uint8 {
return m.SequenceNumber
}
func (m *_APDUConfirmedRequest) GetProposedWindowSize() *uint8 {
return m.ProposedWindowSize
}
func (m *_APDUConfirmedRequest) GetServiceRequest() BACnetConfirmedServiceRequest {
return m.ServiceRequest
}
func (m *_APDUConfirmedRequest) GetSegmentServiceChoice() *BACnetConfirmedServiceChoice {
return m.SegmentServiceChoice
}
func (m *_APDUConfirmedRequest) GetSegment() []byte {
return m.Segment
}
///////////////////////
///////////////////////
///////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////
/////////////////////// Accessors for virtual fields.
///////////////////////
func (m *_APDUConfirmedRequest) GetApduHeaderReduction() uint16 {
ctx := context.Background()
_ = ctx
sequenceNumber := m.GetSequenceNumber()
_ = sequenceNumber
proposedWindowSize := m.GetProposedWindowSize()
_ = proposedWindowSize
serviceRequest := m.GetServiceRequest()
_ = serviceRequest
segmentServiceChoice := m.GetSegmentServiceChoice()
_ = segmentServiceChoice
return uint16(uint16(uint16(3)) + uint16((utils.InlineIf(m.GetSegmentedMessage(), func() any { return uint16(uint16(2)) }, func() any { return uint16(uint16(0)) }).(uint16))))
}
func (m *_APDUConfirmedRequest) GetSegmentReduction() uint16 {
ctx := context.Background()
_ = ctx
sequenceNumber := m.GetSequenceNumber()
_ = sequenceNumber
proposedWindowSize := m.GetProposedWindowSize()
_ = proposedWindowSize
serviceRequest := m.GetServiceRequest()
_ = serviceRequest
segmentServiceChoice := m.GetSegmentServiceChoice()
_ = segmentServiceChoice
return uint16(utils.InlineIf((bool((m.GetSegmentServiceChoice()) != (nil))), func() any { return uint16((uint16(m.GetApduHeaderReduction()) + uint16(uint16(1)))) }, func() any { return uint16(m.GetApduHeaderReduction()) }).(uint16))
}
///////////////////////
///////////////////////
///////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////
// Deprecated: use the interface for direct cast
func CastAPDUConfirmedRequest(structType any) APDUConfirmedRequest {
if casted, ok := structType.(APDUConfirmedRequest); ok {
return casted
}
if casted, ok := structType.(*APDUConfirmedRequest); ok {
return *casted
}
return nil
}
func (m *_APDUConfirmedRequest) GetTypeName() string {
return "APDUConfirmedRequest"
}
func (m *_APDUConfirmedRequest) GetLengthInBits(ctx context.Context) uint16 {
lengthInBits := uint16(m.APDUContract.(*_APDU).getLengthInBits(ctx))
// Simple field (segmentedMessage)
lengthInBits += 1
// Simple field (moreFollows)
lengthInBits += 1
// Simple field (segmentedResponseAccepted)
lengthInBits += 1
// Reserved Field (reserved)
lengthInBits += 2
// Simple field (maxSegmentsAccepted)
lengthInBits += 3
// Simple field (maxApduLengthAccepted)
lengthInBits += 4
// Simple field (invokeId)
lengthInBits += 8
// Optional Field (sequenceNumber)
if m.SequenceNumber != nil {
lengthInBits += 8
}
// Optional Field (proposedWindowSize)
if m.ProposedWindowSize != nil {
lengthInBits += 8
}
// A virtual field doesn't have any in- or output.
// Optional Field (serviceRequest)
if m.ServiceRequest != nil {
lengthInBits += m.ServiceRequest.GetLengthInBits(ctx)
}
// Optional Field (segmentServiceChoice)
if m.SegmentServiceChoice != nil {
lengthInBits += 8
}
// A virtual field doesn't have any in- or output.
// Array field
if len(m.Segment) > 0 {
lengthInBits += 8 * uint16(len(m.Segment))
}
return lengthInBits
}
func (m *_APDUConfirmedRequest) GetLengthInBytes(ctx context.Context) uint16 {
return m.GetLengthInBits(ctx) / 8
}
func (m *_APDUConfirmedRequest) parse(ctx context.Context, readBuffer utils.ReadBuffer, parent *_APDU, apduLength uint16) (__aPDUConfirmedRequest APDUConfirmedRequest, err error) {
m.APDUContract = parent
parent._SubType = m
positionAware := readBuffer
_ = positionAware
if pullErr := readBuffer.PullContext("APDUConfirmedRequest"); pullErr != nil {
return nil, errors.Wrap(pullErr, "Error pulling for APDUConfirmedRequest")
}
currentPos := positionAware.GetPos()
_ = currentPos
segmentedMessage, err := ReadSimpleField(ctx, "segmentedMessage", ReadBoolean(readBuffer))
if err != nil {
return nil, errors.Wrap(err, fmt.Sprintf("Error parsing 'segmentedMessage' field"))
}
m.SegmentedMessage = segmentedMessage
moreFollows, err := ReadSimpleField(ctx, "moreFollows", ReadBoolean(readBuffer))
if err != nil {
return nil, errors.Wrap(err, fmt.Sprintf("Error parsing 'moreFollows' field"))
}
m.MoreFollows = moreFollows
segmentedResponseAccepted, err := ReadSimpleField(ctx, "segmentedResponseAccepted", ReadBoolean(readBuffer))
if err != nil {
return nil, errors.Wrap(err, fmt.Sprintf("Error parsing 'segmentedResponseAccepted' field"))
}
m.SegmentedResponseAccepted = segmentedResponseAccepted
reservedField0, err := ReadReservedField(ctx, "reserved", ReadUnsignedByte(readBuffer, uint8(2)), uint8(0))
if err != nil {
return nil, errors.Wrap(err, fmt.Sprintf("Error parsing reserved field"))
}
m.reservedField0 = reservedField0
maxSegmentsAccepted, err := ReadEnumField[MaxSegmentsAccepted](ctx, "maxSegmentsAccepted", "MaxSegmentsAccepted", ReadEnum(MaxSegmentsAcceptedByValue, ReadUnsignedByte(readBuffer, uint8(3))))
if err != nil {
return nil, errors.Wrap(err, fmt.Sprintf("Error parsing 'maxSegmentsAccepted' field"))
}
m.MaxSegmentsAccepted = maxSegmentsAccepted
maxApduLengthAccepted, err := ReadEnumField[MaxApduLengthAccepted](ctx, "maxApduLengthAccepted", "MaxApduLengthAccepted", ReadEnum(MaxApduLengthAcceptedByValue, ReadUnsignedByte(readBuffer, uint8(4))))
if err != nil {
return nil, errors.Wrap(err, fmt.Sprintf("Error parsing 'maxApduLengthAccepted' field"))
}
m.MaxApduLengthAccepted = maxApduLengthAccepted
invokeId, err := ReadSimpleField(ctx, "invokeId", ReadUnsignedByte(readBuffer, uint8(8)))
if err != nil {
return nil, errors.Wrap(err, fmt.Sprintf("Error parsing 'invokeId' field"))
}
m.InvokeId = invokeId
var sequenceNumber *uint8
sequenceNumber, err = ReadOptionalField[uint8](ctx, "sequenceNumber", ReadUnsignedByte(readBuffer, uint8(8)), segmentedMessage)
if err != nil {
return nil, errors.Wrap(err, fmt.Sprintf("Error parsing 'sequenceNumber' field"))
}
m.SequenceNumber = sequenceNumber
var proposedWindowSize *uint8
proposedWindowSize, err = ReadOptionalField[uint8](ctx, "proposedWindowSize", ReadUnsignedByte(readBuffer, uint8(8)), segmentedMessage)
if err != nil {
return nil, errors.Wrap(err, fmt.Sprintf("Error parsing 'proposedWindowSize' field"))
}
m.ProposedWindowSize = proposedWindowSize
apduHeaderReduction, err := ReadVirtualField[uint16](ctx, "apduHeaderReduction", (*uint16)(nil), uint16(uint16(3))+uint16((utils.InlineIf(segmentedMessage, func() any { return uint16(uint16(2)) }, func() any { return uint16(uint16(0)) }).(uint16))))
if err != nil {
return nil, errors.Wrap(err, fmt.Sprintf("Error parsing 'apduHeaderReduction' field"))
}
_ = apduHeaderReduction
var serviceRequest BACnetConfirmedServiceRequest
_serviceRequest, err := ReadOptionalField[BACnetConfirmedServiceRequest](ctx, "serviceRequest", ReadComplex[BACnetConfirmedServiceRequest](BACnetConfirmedServiceRequestParseWithBufferProducer[BACnetConfirmedServiceRequest]((uint32)(uint32(apduLength)-uint32(apduHeaderReduction))), readBuffer), !(segmentedMessage))
if err != nil {
return nil, errors.Wrap(err, fmt.Sprintf("Error parsing 'serviceRequest' field"))
}
if _serviceRequest != nil {
serviceRequest = *_serviceRequest
m.ServiceRequest = serviceRequest
}
// Validation
if !(bool((bool(!(segmentedMessage)) && bool(bool((serviceRequest) != (nil))))) || bool(segmentedMessage)) {
return nil, errors.WithStack(utils.ParseValidationError{Message: "service request should be set"})
}
var segmentServiceChoice *BACnetConfirmedServiceChoice
segmentServiceChoice, err = ReadOptionalField[BACnetConfirmedServiceChoice](ctx, "segmentServiceChoice", ReadEnum(BACnetConfirmedServiceChoiceByValue, ReadUnsignedByte(readBuffer, uint8(8))), bool(segmentedMessage) && bool(bool((*sequenceNumber) != (0))))
if err != nil {
return nil, errors.Wrap(err, fmt.Sprintf("Error parsing 'segmentServiceChoice' field"))
}
m.SegmentServiceChoice = segmentServiceChoice
segmentReduction, err := ReadVirtualField[uint16](ctx, "segmentReduction", (*uint16)(nil), utils.InlineIf((bool((segmentServiceChoice) != (nil))), func() any { return uint16((uint16(apduHeaderReduction) + uint16(uint16(1)))) }, func() any { return uint16(apduHeaderReduction) }).(uint16))
if err != nil {
return nil, errors.Wrap(err, fmt.Sprintf("Error parsing 'segmentReduction' field"))
}
_ = segmentReduction
segment, err := readBuffer.ReadByteArray("segment", int(utils.InlineIf(segmentedMessage, func() any {
return int32((utils.InlineIf((bool((apduLength) > (0))), func() any { return int32((int32(apduLength) - int32(segmentReduction))) }, func() any { return int32(int32(0)) }).(int32)))
}, func() any { return int32(int32(0)) }).(int32)))
if err != nil {
return nil, errors.Wrap(err, fmt.Sprintf("Error parsing 'segment' field"))
}
m.Segment = segment
if closeErr := readBuffer.CloseContext("APDUConfirmedRequest"); closeErr != nil {
return nil, errors.Wrap(closeErr, "Error closing for APDUConfirmedRequest")
}
return m, nil
}
func (m *_APDUConfirmedRequest) Serialize() ([]byte, error) {
wb := utils.NewWriteBufferByteBased(utils.WithInitialSizeForByteBasedBuffer(int(m.GetLengthInBytes(context.Background()))))
if err := m.SerializeWithWriteBuffer(context.Background(), wb); err != nil {
return nil, err
}
return wb.GetBytes(), nil
}
func (m *_APDUConfirmedRequest) SerializeWithWriteBuffer(ctx context.Context, writeBuffer utils.WriteBuffer) error {
positionAware := writeBuffer
_ = positionAware
log := zerolog.Ctx(ctx)
_ = log
ser := func() error {
if pushErr := writeBuffer.PushContext("APDUConfirmedRequest"); pushErr != nil {
return errors.Wrap(pushErr, "Error pushing for APDUConfirmedRequest")
}
if err := WriteSimpleField[bool](ctx, "segmentedMessage", m.GetSegmentedMessage(), WriteBoolean(writeBuffer)); err != nil {
return errors.Wrap(err, "Error serializing 'segmentedMessage' field")
}
if err := WriteSimpleField[bool](ctx, "moreFollows", m.GetMoreFollows(), WriteBoolean(writeBuffer)); err != nil {
return errors.Wrap(err, "Error serializing 'moreFollows' field")
}
if err := WriteSimpleField[bool](ctx, "segmentedResponseAccepted", m.GetSegmentedResponseAccepted(), WriteBoolean(writeBuffer)); err != nil {
return errors.Wrap(err, "Error serializing 'segmentedResponseAccepted' field")
}
if err := WriteReservedField[uint8](ctx, "reserved", uint8(0), WriteUnsignedByte(writeBuffer, 2)); err != nil {
return errors.Wrap(err, "Error serializing 'reserved' field number 1")
}
if err := WriteSimpleEnumField[MaxSegmentsAccepted](ctx, "maxSegmentsAccepted", "MaxSegmentsAccepted", m.GetMaxSegmentsAccepted(), WriteEnum[MaxSegmentsAccepted, uint8](MaxSegmentsAccepted.GetValue, MaxSegmentsAccepted.PLC4XEnumName, WriteUnsignedByte(writeBuffer, 3))); err != nil {
return errors.Wrap(err, "Error serializing 'maxSegmentsAccepted' field")
}
if err := WriteSimpleEnumField[MaxApduLengthAccepted](ctx, "maxApduLengthAccepted", "MaxApduLengthAccepted", m.GetMaxApduLengthAccepted(), WriteEnum[MaxApduLengthAccepted, uint8](MaxApduLengthAccepted.GetValue, MaxApduLengthAccepted.PLC4XEnumName, WriteUnsignedByte(writeBuffer, 4))); err != nil {
return errors.Wrap(err, "Error serializing 'maxApduLengthAccepted' field")
}
if err := WriteSimpleField[uint8](ctx, "invokeId", m.GetInvokeId(), WriteUnsignedByte(writeBuffer, 8)); err != nil {
return errors.Wrap(err, "Error serializing 'invokeId' field")
}
if err := WriteOptionalField[uint8](ctx, "sequenceNumber", m.GetSequenceNumber(), WriteUnsignedByte(writeBuffer, 8), true); err != nil {
return errors.Wrap(err, "Error serializing 'sequenceNumber' field")
}
if err := WriteOptionalField[uint8](ctx, "proposedWindowSize", m.GetProposedWindowSize(), WriteUnsignedByte(writeBuffer, 8), true); err != nil {
return errors.Wrap(err, "Error serializing 'proposedWindowSize' field")
}
// Virtual field
apduHeaderReduction := m.GetApduHeaderReduction()
_ = apduHeaderReduction
if _apduHeaderReductionErr := writeBuffer.WriteVirtual(ctx, "apduHeaderReduction", m.GetApduHeaderReduction()); _apduHeaderReductionErr != nil {
return errors.Wrap(_apduHeaderReductionErr, "Error serializing 'apduHeaderReduction' field")
}
if err := WriteOptionalField[BACnetConfirmedServiceRequest](ctx, "serviceRequest", GetRef(m.GetServiceRequest()), WriteComplex[BACnetConfirmedServiceRequest](writeBuffer), true); err != nil {
return errors.Wrap(err, "Error serializing 'serviceRequest' field")
}
if err := WriteOptionalEnumField[BACnetConfirmedServiceChoice](ctx, "segmentServiceChoice", "BACnetConfirmedServiceChoice", m.GetSegmentServiceChoice(), WriteEnum[BACnetConfirmedServiceChoice, uint8](BACnetConfirmedServiceChoice.GetValue, BACnetConfirmedServiceChoice.PLC4XEnumName, WriteUnsignedByte(writeBuffer, 8)), bool(m.GetSegmentedMessage()) && bool(bool((*m.GetSequenceNumber()) != (0)))); err != nil {
return errors.Wrap(err, "Error serializing 'segmentServiceChoice' field")
}
// Virtual field
segmentReduction := m.GetSegmentReduction()
_ = segmentReduction
if _segmentReductionErr := writeBuffer.WriteVirtual(ctx, "segmentReduction", m.GetSegmentReduction()); _segmentReductionErr != nil {
return errors.Wrap(_segmentReductionErr, "Error serializing 'segmentReduction' field")
}
if err := WriteByteArrayField(ctx, "segment", m.GetSegment(), WriteByteArray(writeBuffer, 8)); err != nil {
return errors.Wrap(err, "Error serializing 'segment' field")
}
if popErr := writeBuffer.PopContext("APDUConfirmedRequest"); popErr != nil {
return errors.Wrap(popErr, "Error popping for APDUConfirmedRequest")
}
return nil
}
return m.APDUContract.(*_APDU).serializeParent(ctx, writeBuffer, m, ser)
}
func (m *_APDUConfirmedRequest) IsAPDUConfirmedRequest() {}
func (m *_APDUConfirmedRequest) DeepCopy() any {
return m.deepCopy()
}
func (m *_APDUConfirmedRequest) deepCopy() *_APDUConfirmedRequest {
if m == nil {
return nil
}
_APDUConfirmedRequestCopy := &_APDUConfirmedRequest{
m.APDUContract.(*_APDU).deepCopy(),
m.SegmentedMessage,
m.MoreFollows,
m.SegmentedResponseAccepted,
m.MaxSegmentsAccepted,
m.MaxApduLengthAccepted,
m.InvokeId,
utils.CopyPtr[uint8](m.SequenceNumber),
utils.CopyPtr[uint8](m.ProposedWindowSize),
utils.DeepCopy[BACnetConfirmedServiceRequest](m.ServiceRequest),
utils.CopyPtr[BACnetConfirmedServiceChoice](m.SegmentServiceChoice),
utils.DeepCopySlice[byte, byte](m.Segment),
m.reservedField0,
}
_APDUConfirmedRequestCopy.APDUContract.(*_APDU)._SubType = m
return _APDUConfirmedRequestCopy
}
func (m *_APDUConfirmedRequest) String() string {
if m == nil {
return "<nil>"
}
wb := utils.NewWriteBufferBoxBased(
utils.WithWriteBufferBoxBasedMergeSingleBoxes(),
utils.WithWriteBufferBoxBasedOmitEmptyBoxes(),
utils.WithWriteBufferBoxBasedPrintPosLengthFooter(),
)
if err := wb.WriteSerializable(context.Background(), m); err != nil {
return err.Error()
}
return wb.GetBox().String()
}