plc4go/protocols/bacnetip/readwrite/model/BACnetServiceAck.go (453 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. // BACnetServiceAck is the corresponding interface of BACnetServiceAck type BACnetServiceAck interface { BACnetServiceAckContract BACnetServiceAckRequirements fmt.Stringer utils.LengthAware utils.Serializable utils.Copyable // IsBACnetServiceAck is a marker method to prevent unintentional type checks (interfaces of same signature) IsBACnetServiceAck() // CreateBuilder creates a BACnetServiceAckBuilder CreateBACnetServiceAckBuilder() BACnetServiceAckBuilder } // BACnetServiceAckContract provides a set of functions which can be overwritten by a sub struct type BACnetServiceAckContract interface { // GetServiceAckPayloadLength returns ServiceAckPayloadLength (virtual field) GetServiceAckPayloadLength() uint32 // GetServiceAckLength() returns a parser argument GetServiceAckLength() uint32 // IsBACnetServiceAck is a marker method to prevent unintentional type checks (interfaces of same signature) IsBACnetServiceAck() // CreateBuilder creates a BACnetServiceAckBuilder CreateBACnetServiceAckBuilder() BACnetServiceAckBuilder } // BACnetServiceAckRequirements provides a set of functions which need to be implemented by a sub struct type BACnetServiceAckRequirements interface { GetLengthInBits(ctx context.Context) uint16 GetLengthInBytes(ctx context.Context) uint16 // GetServiceChoice returns ServiceChoice (discriminator field) GetServiceChoice() BACnetConfirmedServiceChoice } // _BACnetServiceAck is the data-structure of this message type _BACnetServiceAck struct { _SubType interface { BACnetServiceAckContract BACnetServiceAckRequirements } // Arguments. ServiceAckLength uint32 } var _ BACnetServiceAckContract = (*_BACnetServiceAck)(nil) // NewBACnetServiceAck factory function for _BACnetServiceAck func NewBACnetServiceAck(serviceAckLength uint32) *_BACnetServiceAck { return &_BACnetServiceAck{ServiceAckLength: serviceAckLength} } /////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////// /////////////////////// Builder /////////////////////// // BACnetServiceAckBuilder is a builder for BACnetServiceAck type BACnetServiceAckBuilder interface { utils.Copyable // WithMandatoryFields adds all mandatory fields (convenience for using multiple builder calls) WithMandatoryFields() BACnetServiceAckBuilder // WithArgServiceAckLength sets a parser argument WithArgServiceAckLength(uint32) BACnetServiceAckBuilder // AsBACnetServiceAckGetAlarmSummary converts this build to a subType of BACnetServiceAck. It is always possible to return to current builder using Done() AsBACnetServiceAckGetAlarmSummary() BACnetServiceAckGetAlarmSummaryBuilder // AsBACnetServiceAckGetEnrollmentSummary converts this build to a subType of BACnetServiceAck. It is always possible to return to current builder using Done() AsBACnetServiceAckGetEnrollmentSummary() BACnetServiceAckGetEnrollmentSummaryBuilder // AsBACnetServiceAckGetEventInformation converts this build to a subType of BACnetServiceAck. It is always possible to return to current builder using Done() AsBACnetServiceAckGetEventInformation() BACnetServiceAckGetEventInformationBuilder // AsBACnetServiceAckAtomicReadFile converts this build to a subType of BACnetServiceAck. It is always possible to return to current builder using Done() AsBACnetServiceAckAtomicReadFile() BACnetServiceAckAtomicReadFileBuilder // AsBACnetServiceAckAtomicWriteFile converts this build to a subType of BACnetServiceAck. It is always possible to return to current builder using Done() AsBACnetServiceAckAtomicWriteFile() BACnetServiceAckAtomicWriteFileBuilder // AsBACnetServiceAckCreateObject converts this build to a subType of BACnetServiceAck. It is always possible to return to current builder using Done() AsBACnetServiceAckCreateObject() BACnetServiceAckCreateObjectBuilder // AsBACnetServiceAckReadProperty converts this build to a subType of BACnetServiceAck. It is always possible to return to current builder using Done() AsBACnetServiceAckReadProperty() BACnetServiceAckReadPropertyBuilder // AsBACnetServiceAckReadPropertyMultiple converts this build to a subType of BACnetServiceAck. It is always possible to return to current builder using Done() AsBACnetServiceAckReadPropertyMultiple() BACnetServiceAckReadPropertyMultipleBuilder // AsBACnetServiceAckReadRange converts this build to a subType of BACnetServiceAck. It is always possible to return to current builder using Done() AsBACnetServiceAckReadRange() BACnetServiceAckReadRangeBuilder // AsBACnetServiceAckConfirmedPrivateTransfer converts this build to a subType of BACnetServiceAck. It is always possible to return to current builder using Done() AsBACnetServiceAckConfirmedPrivateTransfer() BACnetServiceAckConfirmedPrivateTransferBuilder // AsBACnetServiceAckVTOpen converts this build to a subType of BACnetServiceAck. It is always possible to return to current builder using Done() AsBACnetServiceAckVTOpen() BACnetServiceAckVTOpenBuilder // AsBACnetServiceAckVTData converts this build to a subType of BACnetServiceAck. It is always possible to return to current builder using Done() AsBACnetServiceAckVTData() BACnetServiceAckVTDataBuilder // AsBACnetServiceAckAuthenticate converts this build to a subType of BACnetServiceAck. It is always possible to return to current builder using Done() AsBACnetServiceAckAuthenticate() BACnetServiceAckAuthenticateBuilder // AsBACnetServiceAckRequestKey converts this build to a subType of BACnetServiceAck. It is always possible to return to current builder using Done() AsBACnetServiceAckRequestKey() BACnetServiceAckRequestKeyBuilder // AsBACnetServiceAckReadPropertyConditional converts this build to a subType of BACnetServiceAck. It is always possible to return to current builder using Done() AsBACnetServiceAckReadPropertyConditional() BACnetServiceAckReadPropertyConditionalBuilder // Build builds the BACnetServiceAck or returns an error if something is wrong PartialBuild() (BACnetServiceAckContract, error) // MustBuild does the same as Build but panics on error PartialMustBuild() BACnetServiceAckContract // Build builds the BACnetServiceAck or returns an error if something is wrong Build() (BACnetServiceAck, error) // MustBuild does the same as Build but panics on error MustBuild() BACnetServiceAck } // NewBACnetServiceAckBuilder() creates a BACnetServiceAckBuilder func NewBACnetServiceAckBuilder() BACnetServiceAckBuilder { return &_BACnetServiceAckBuilder{_BACnetServiceAck: new(_BACnetServiceAck)} } type _BACnetServiceAckChildBuilder interface { utils.Copyable setParent(BACnetServiceAckContract) buildForBACnetServiceAck() (BACnetServiceAck, error) } type _BACnetServiceAckBuilder struct { *_BACnetServiceAck childBuilder _BACnetServiceAckChildBuilder err *utils.MultiError } var _ (BACnetServiceAckBuilder) = (*_BACnetServiceAckBuilder)(nil) func (b *_BACnetServiceAckBuilder) WithMandatoryFields() BACnetServiceAckBuilder { return b } func (b *_BACnetServiceAckBuilder) WithArgServiceAckLength(serviceAckLength uint32) BACnetServiceAckBuilder { b.ServiceAckLength = serviceAckLength return b } func (b *_BACnetServiceAckBuilder) PartialBuild() (BACnetServiceAckContract, error) { if b.err != nil { return nil, errors.Wrap(b.err, "error occurred during build") } return b._BACnetServiceAck.deepCopy(), nil } func (b *_BACnetServiceAckBuilder) PartialMustBuild() BACnetServiceAckContract { build, err := b.PartialBuild() if err != nil { panic(err) } return build } func (b *_BACnetServiceAckBuilder) AsBACnetServiceAckGetAlarmSummary() BACnetServiceAckGetAlarmSummaryBuilder { if cb, ok := b.childBuilder.(BACnetServiceAckGetAlarmSummaryBuilder); ok { return cb } cb := NewBACnetServiceAckGetAlarmSummaryBuilder().(*_BACnetServiceAckGetAlarmSummaryBuilder) cb.parentBuilder = b b.childBuilder = cb return cb } func (b *_BACnetServiceAckBuilder) AsBACnetServiceAckGetEnrollmentSummary() BACnetServiceAckGetEnrollmentSummaryBuilder { if cb, ok := b.childBuilder.(BACnetServiceAckGetEnrollmentSummaryBuilder); ok { return cb } cb := NewBACnetServiceAckGetEnrollmentSummaryBuilder().(*_BACnetServiceAckGetEnrollmentSummaryBuilder) cb.parentBuilder = b b.childBuilder = cb return cb } func (b *_BACnetServiceAckBuilder) AsBACnetServiceAckGetEventInformation() BACnetServiceAckGetEventInformationBuilder { if cb, ok := b.childBuilder.(BACnetServiceAckGetEventInformationBuilder); ok { return cb } cb := NewBACnetServiceAckGetEventInformationBuilder().(*_BACnetServiceAckGetEventInformationBuilder) cb.parentBuilder = b b.childBuilder = cb return cb } func (b *_BACnetServiceAckBuilder) AsBACnetServiceAckAtomicReadFile() BACnetServiceAckAtomicReadFileBuilder { if cb, ok := b.childBuilder.(BACnetServiceAckAtomicReadFileBuilder); ok { return cb } cb := NewBACnetServiceAckAtomicReadFileBuilder().(*_BACnetServiceAckAtomicReadFileBuilder) cb.parentBuilder = b b.childBuilder = cb return cb } func (b *_BACnetServiceAckBuilder) AsBACnetServiceAckAtomicWriteFile() BACnetServiceAckAtomicWriteFileBuilder { if cb, ok := b.childBuilder.(BACnetServiceAckAtomicWriteFileBuilder); ok { return cb } cb := NewBACnetServiceAckAtomicWriteFileBuilder().(*_BACnetServiceAckAtomicWriteFileBuilder) cb.parentBuilder = b b.childBuilder = cb return cb } func (b *_BACnetServiceAckBuilder) AsBACnetServiceAckCreateObject() BACnetServiceAckCreateObjectBuilder { if cb, ok := b.childBuilder.(BACnetServiceAckCreateObjectBuilder); ok { return cb } cb := NewBACnetServiceAckCreateObjectBuilder().(*_BACnetServiceAckCreateObjectBuilder) cb.parentBuilder = b b.childBuilder = cb return cb } func (b *_BACnetServiceAckBuilder) AsBACnetServiceAckReadProperty() BACnetServiceAckReadPropertyBuilder { if cb, ok := b.childBuilder.(BACnetServiceAckReadPropertyBuilder); ok { return cb } cb := NewBACnetServiceAckReadPropertyBuilder().(*_BACnetServiceAckReadPropertyBuilder) cb.parentBuilder = b b.childBuilder = cb return cb } func (b *_BACnetServiceAckBuilder) AsBACnetServiceAckReadPropertyMultiple() BACnetServiceAckReadPropertyMultipleBuilder { if cb, ok := b.childBuilder.(BACnetServiceAckReadPropertyMultipleBuilder); ok { return cb } cb := NewBACnetServiceAckReadPropertyMultipleBuilder().(*_BACnetServiceAckReadPropertyMultipleBuilder) cb.parentBuilder = b b.childBuilder = cb return cb } func (b *_BACnetServiceAckBuilder) AsBACnetServiceAckReadRange() BACnetServiceAckReadRangeBuilder { if cb, ok := b.childBuilder.(BACnetServiceAckReadRangeBuilder); ok { return cb } cb := NewBACnetServiceAckReadRangeBuilder().(*_BACnetServiceAckReadRangeBuilder) cb.parentBuilder = b b.childBuilder = cb return cb } func (b *_BACnetServiceAckBuilder) AsBACnetServiceAckConfirmedPrivateTransfer() BACnetServiceAckConfirmedPrivateTransferBuilder { if cb, ok := b.childBuilder.(BACnetServiceAckConfirmedPrivateTransferBuilder); ok { return cb } cb := NewBACnetServiceAckConfirmedPrivateTransferBuilder().(*_BACnetServiceAckConfirmedPrivateTransferBuilder) cb.parentBuilder = b b.childBuilder = cb return cb } func (b *_BACnetServiceAckBuilder) AsBACnetServiceAckVTOpen() BACnetServiceAckVTOpenBuilder { if cb, ok := b.childBuilder.(BACnetServiceAckVTOpenBuilder); ok { return cb } cb := NewBACnetServiceAckVTOpenBuilder().(*_BACnetServiceAckVTOpenBuilder) cb.parentBuilder = b b.childBuilder = cb return cb } func (b *_BACnetServiceAckBuilder) AsBACnetServiceAckVTData() BACnetServiceAckVTDataBuilder { if cb, ok := b.childBuilder.(BACnetServiceAckVTDataBuilder); ok { return cb } cb := NewBACnetServiceAckVTDataBuilder().(*_BACnetServiceAckVTDataBuilder) cb.parentBuilder = b b.childBuilder = cb return cb } func (b *_BACnetServiceAckBuilder) AsBACnetServiceAckAuthenticate() BACnetServiceAckAuthenticateBuilder { if cb, ok := b.childBuilder.(BACnetServiceAckAuthenticateBuilder); ok { return cb } cb := NewBACnetServiceAckAuthenticateBuilder().(*_BACnetServiceAckAuthenticateBuilder) cb.parentBuilder = b b.childBuilder = cb return cb } func (b *_BACnetServiceAckBuilder) AsBACnetServiceAckRequestKey() BACnetServiceAckRequestKeyBuilder { if cb, ok := b.childBuilder.(BACnetServiceAckRequestKeyBuilder); ok { return cb } cb := NewBACnetServiceAckRequestKeyBuilder().(*_BACnetServiceAckRequestKeyBuilder) cb.parentBuilder = b b.childBuilder = cb return cb } func (b *_BACnetServiceAckBuilder) AsBACnetServiceAckReadPropertyConditional() BACnetServiceAckReadPropertyConditionalBuilder { if cb, ok := b.childBuilder.(BACnetServiceAckReadPropertyConditionalBuilder); ok { return cb } cb := NewBACnetServiceAckReadPropertyConditionalBuilder().(*_BACnetServiceAckReadPropertyConditionalBuilder) cb.parentBuilder = b b.childBuilder = cb return cb } func (b *_BACnetServiceAckBuilder) Build() (BACnetServiceAck, error) { v, err := b.PartialBuild() if err != nil { return nil, errors.Wrap(err, "error occurred during partial build") } if b.childBuilder == nil { return nil, errors.New("no child builder present") } b.childBuilder.setParent(v) return b.childBuilder.buildForBACnetServiceAck() } func (b *_BACnetServiceAckBuilder) MustBuild() BACnetServiceAck { build, err := b.Build() if err != nil { panic(err) } return build } func (b *_BACnetServiceAckBuilder) DeepCopy() any { _copy := b.CreateBACnetServiceAckBuilder().(*_BACnetServiceAckBuilder) _copy.childBuilder = b.childBuilder.DeepCopy().(_BACnetServiceAckChildBuilder) _copy.childBuilder.setParent(_copy) if b.err != nil { _copy.err = b.err.DeepCopy().(*utils.MultiError) } return _copy } // CreateBACnetServiceAckBuilder creates a BACnetServiceAckBuilder func (b *_BACnetServiceAck) CreateBACnetServiceAckBuilder() BACnetServiceAckBuilder { if b == nil { return NewBACnetServiceAckBuilder() } return &_BACnetServiceAckBuilder{_BACnetServiceAck: b.deepCopy()} } /////////////////////// /////////////////////// /////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////// /////////////////////// Accessors for virtual fields. /////////////////////// func (pm *_BACnetServiceAck) GetServiceAckPayloadLength() uint32 { m := pm._SubType ctx := context.Background() _ = ctx return uint32(utils.InlineIf((bool((m.GetServiceAckLength()) > (0))), func() any { return uint32((uint32(m.GetServiceAckLength()) - uint32(uint32(1)))) }, func() any { return uint32(uint32(0)) }).(uint32)) } /////////////////////// /////////////////////// /////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////// // Deprecated: use the interface for direct cast func CastBACnetServiceAck(structType any) BACnetServiceAck { if casted, ok := structType.(BACnetServiceAck); ok { return casted } if casted, ok := structType.(*BACnetServiceAck); ok { return *casted } return nil } func (m *_BACnetServiceAck) GetTypeName() string { return "BACnetServiceAck" } func (m *_BACnetServiceAck) getLengthInBits(ctx context.Context) uint16 { lengthInBits := uint16(0) // Discriminator Field (serviceChoice) lengthInBits += 8 // A virtual field doesn't have any in- or output. return lengthInBits } func (m *_BACnetServiceAck) GetLengthInBits(ctx context.Context) uint16 { return m._SubType.GetLengthInBits(ctx) } func (m *_BACnetServiceAck) GetLengthInBytes(ctx context.Context) uint16 { return m._SubType.GetLengthInBits(ctx) / 8 } func BACnetServiceAckParse[T BACnetServiceAck](ctx context.Context, theBytes []byte, serviceAckLength uint32) (T, error) { return BACnetServiceAckParseWithBuffer[T](ctx, utils.NewReadBufferByteBased(theBytes), serviceAckLength) } func BACnetServiceAckParseWithBufferProducer[T BACnetServiceAck](serviceAckLength uint32) func(ctx context.Context, readBuffer utils.ReadBuffer) (T, error) { return func(ctx context.Context, readBuffer utils.ReadBuffer) (T, error) { v, err := BACnetServiceAckParseWithBuffer[T](ctx, readBuffer, serviceAckLength) if err != nil { var zero T return zero, err } return v, nil } } func BACnetServiceAckParseWithBuffer[T BACnetServiceAck](ctx context.Context, readBuffer utils.ReadBuffer, serviceAckLength uint32) (T, error) { v, err := (&_BACnetServiceAck{ServiceAckLength: serviceAckLength}).parse(ctx, readBuffer, serviceAckLength) if err != nil { var zero T return zero, err } vc, ok := v.(T) if !ok { var zero T return zero, errors.Errorf("Unexpected type %T. Expected type %T", v, *new(T)) } return vc, nil } func (m *_BACnetServiceAck) parse(ctx context.Context, readBuffer utils.ReadBuffer, serviceAckLength uint32) (__bACnetServiceAck BACnetServiceAck, err error) { positionAware := readBuffer _ = positionAware if pullErr := readBuffer.PullContext("BACnetServiceAck"); pullErr != nil { return nil, errors.Wrap(pullErr, "Error pulling for BACnetServiceAck") } currentPos := positionAware.GetPos() _ = currentPos serviceChoice, err := ReadDiscriminatorEnumField[BACnetConfirmedServiceChoice](ctx, "serviceChoice", "BACnetConfirmedServiceChoice", ReadEnum(BACnetConfirmedServiceChoiceByValue, ReadUnsignedByte(readBuffer, uint8(8)))) if err != nil { return nil, errors.Wrap(err, fmt.Sprintf("Error parsing 'serviceChoice' field")) } serviceAckPayloadLength, err := ReadVirtualField[uint32](ctx, "serviceAckPayloadLength", (*uint32)(nil), utils.InlineIf((bool((serviceAckLength) > (0))), func() any { return uint32((uint32(serviceAckLength) - uint32(uint32(1)))) }, func() any { return uint32(uint32(0)) }).(uint32)) if err != nil { return nil, errors.Wrap(err, fmt.Sprintf("Error parsing 'serviceAckPayloadLength' field")) } _ = serviceAckPayloadLength // Switch Field (Depending on the discriminator values, passes the instantiation to a sub-type) var _child BACnetServiceAck switch { case serviceChoice == BACnetConfirmedServiceChoice_GET_ALARM_SUMMARY: // BACnetServiceAckGetAlarmSummary if _child, err = new(_BACnetServiceAckGetAlarmSummary).parse(ctx, readBuffer, m, serviceAckLength); err != nil { return nil, errors.Wrap(err, "Error parsing sub-type BACnetServiceAckGetAlarmSummary for type-switch of BACnetServiceAck") } case serviceChoice == BACnetConfirmedServiceChoice_GET_ENROLLMENT_SUMMARY: // BACnetServiceAckGetEnrollmentSummary if _child, err = new(_BACnetServiceAckGetEnrollmentSummary).parse(ctx, readBuffer, m, serviceAckLength); err != nil { return nil, errors.Wrap(err, "Error parsing sub-type BACnetServiceAckGetEnrollmentSummary for type-switch of BACnetServiceAck") } case serviceChoice == BACnetConfirmedServiceChoice_GET_EVENT_INFORMATION: // BACnetServiceAckGetEventInformation if _child, err = new(_BACnetServiceAckGetEventInformation).parse(ctx, readBuffer, m, serviceAckLength); err != nil { return nil, errors.Wrap(err, "Error parsing sub-type BACnetServiceAckGetEventInformation for type-switch of BACnetServiceAck") } case serviceChoice == BACnetConfirmedServiceChoice_ATOMIC_READ_FILE: // BACnetServiceAckAtomicReadFile if _child, err = new(_BACnetServiceAckAtomicReadFile).parse(ctx, readBuffer, m, serviceAckLength); err != nil { return nil, errors.Wrap(err, "Error parsing sub-type BACnetServiceAckAtomicReadFile for type-switch of BACnetServiceAck") } case serviceChoice == BACnetConfirmedServiceChoice_ATOMIC_WRITE_FILE: // BACnetServiceAckAtomicWriteFile if _child, err = new(_BACnetServiceAckAtomicWriteFile).parse(ctx, readBuffer, m, serviceAckLength); err != nil { return nil, errors.Wrap(err, "Error parsing sub-type BACnetServiceAckAtomicWriteFile for type-switch of BACnetServiceAck") } case serviceChoice == BACnetConfirmedServiceChoice_CREATE_OBJECT: // BACnetServiceAckCreateObject if _child, err = new(_BACnetServiceAckCreateObject).parse(ctx, readBuffer, m, serviceAckLength); err != nil { return nil, errors.Wrap(err, "Error parsing sub-type BACnetServiceAckCreateObject for type-switch of BACnetServiceAck") } case serviceChoice == BACnetConfirmedServiceChoice_READ_PROPERTY: // BACnetServiceAckReadProperty if _child, err = new(_BACnetServiceAckReadProperty).parse(ctx, readBuffer, m, serviceAckLength); err != nil { return nil, errors.Wrap(err, "Error parsing sub-type BACnetServiceAckReadProperty for type-switch of BACnetServiceAck") } case serviceChoice == BACnetConfirmedServiceChoice_READ_PROPERTY_MULTIPLE: // BACnetServiceAckReadPropertyMultiple if _child, err = new(_BACnetServiceAckReadPropertyMultiple).parse(ctx, readBuffer, m, serviceAckPayloadLength, serviceAckLength); err != nil { return nil, errors.Wrap(err, "Error parsing sub-type BACnetServiceAckReadPropertyMultiple for type-switch of BACnetServiceAck") } case serviceChoice == BACnetConfirmedServiceChoice_READ_RANGE: // BACnetServiceAckReadRange if _child, err = new(_BACnetServiceAckReadRange).parse(ctx, readBuffer, m, serviceAckLength); err != nil { return nil, errors.Wrap(err, "Error parsing sub-type BACnetServiceAckReadRange for type-switch of BACnetServiceAck") } case serviceChoice == BACnetConfirmedServiceChoice_CONFIRMED_PRIVATE_TRANSFER: // BACnetServiceAckConfirmedPrivateTransfer if _child, err = new(_BACnetServiceAckConfirmedPrivateTransfer).parse(ctx, readBuffer, m, serviceAckLength); err != nil { return nil, errors.Wrap(err, "Error parsing sub-type BACnetServiceAckConfirmedPrivateTransfer for type-switch of BACnetServiceAck") } case serviceChoice == BACnetConfirmedServiceChoice_VT_OPEN: // BACnetServiceAckVTOpen if _child, err = new(_BACnetServiceAckVTOpen).parse(ctx, readBuffer, m, serviceAckLength); err != nil { return nil, errors.Wrap(err, "Error parsing sub-type BACnetServiceAckVTOpen for type-switch of BACnetServiceAck") } case serviceChoice == BACnetConfirmedServiceChoice_VT_DATA: // BACnetServiceAckVTData if _child, err = new(_BACnetServiceAckVTData).parse(ctx, readBuffer, m, serviceAckLength); err != nil { return nil, errors.Wrap(err, "Error parsing sub-type BACnetServiceAckVTData for type-switch of BACnetServiceAck") } case serviceChoice == BACnetConfirmedServiceChoice_AUTHENTICATE: // BACnetServiceAckAuthenticate if _child, err = new(_BACnetServiceAckAuthenticate).parse(ctx, readBuffer, m, serviceAckPayloadLength, serviceAckLength); err != nil { return nil, errors.Wrap(err, "Error parsing sub-type BACnetServiceAckAuthenticate for type-switch of BACnetServiceAck") } case serviceChoice == BACnetConfirmedServiceChoice_REQUEST_KEY: // BACnetServiceAckRequestKey if _child, err = new(_BACnetServiceAckRequestKey).parse(ctx, readBuffer, m, serviceAckPayloadLength, serviceAckLength); err != nil { return nil, errors.Wrap(err, "Error parsing sub-type BACnetServiceAckRequestKey for type-switch of BACnetServiceAck") } case serviceChoice == BACnetConfirmedServiceChoice_READ_PROPERTY_CONDITIONAL: // BACnetServiceAckReadPropertyConditional if _child, err = new(_BACnetServiceAckReadPropertyConditional).parse(ctx, readBuffer, m, serviceAckPayloadLength, serviceAckLength); err != nil { return nil, errors.Wrap(err, "Error parsing sub-type BACnetServiceAckReadPropertyConditional for type-switch of BACnetServiceAck") } default: return nil, errors.Errorf("Unmapped type for parameters [serviceChoice=%v]", serviceChoice) } if closeErr := readBuffer.CloseContext("BACnetServiceAck"); closeErr != nil { return nil, errors.Wrap(closeErr, "Error closing for BACnetServiceAck") } return _child, nil } func (pm *_BACnetServiceAck) serializeParent(ctx context.Context, writeBuffer utils.WriteBuffer, child BACnetServiceAck, serializeChildFunction func() error) error { // We redirect all calls through client as some methods are only implemented there m := child _ = m positionAware := writeBuffer _ = positionAware log := zerolog.Ctx(ctx) _ = log if pushErr := writeBuffer.PushContext("BACnetServiceAck"); pushErr != nil { return errors.Wrap(pushErr, "Error pushing for BACnetServiceAck") } if err := WriteDiscriminatorEnumField(ctx, "serviceChoice", "BACnetConfirmedServiceChoice", m.GetServiceChoice(), WriteEnum[BACnetConfirmedServiceChoice, uint8](BACnetConfirmedServiceChoice.GetValue, BACnetConfirmedServiceChoice.PLC4XEnumName, WriteUnsignedByte(writeBuffer, 8))); err != nil { return errors.Wrap(err, "Error serializing 'serviceChoice' field") } // Virtual field serviceAckPayloadLength := m.GetServiceAckPayloadLength() _ = serviceAckPayloadLength if _serviceAckPayloadLengthErr := writeBuffer.WriteVirtual(ctx, "serviceAckPayloadLength", m.GetServiceAckPayloadLength()); _serviceAckPayloadLengthErr != nil { return errors.Wrap(_serviceAckPayloadLengthErr, "Error serializing 'serviceAckPayloadLength' field") } // Switch field (Depending on the discriminator values, passes the serialization to a sub-type) if _typeSwitchErr := serializeChildFunction(); _typeSwitchErr != nil { return errors.Wrap(_typeSwitchErr, "Error serializing sub-type field") } if popErr := writeBuffer.PopContext("BACnetServiceAck"); popErr != nil { return errors.Wrap(popErr, "Error popping for BACnetServiceAck") } return nil } //// // Arguments Getter func (m *_BACnetServiceAck) GetServiceAckLength() uint32 { return m.ServiceAckLength } // //// func (m *_BACnetServiceAck) IsBACnetServiceAck() {} func (m *_BACnetServiceAck) DeepCopy() any { return m.deepCopy() } func (m *_BACnetServiceAck) deepCopy() *_BACnetServiceAck { if m == nil { return nil } _BACnetServiceAckCopy := &_BACnetServiceAck{ nil, // will be set by child m.ServiceAckLength, } return _BACnetServiceAckCopy }