plc4go/protocols/bacnetip/readwrite/model/NLM.go (552 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.
// NLM is the corresponding interface of NLM
type NLM interface {
NLMContract
NLMRequirements
fmt.Stringer
utils.LengthAware
utils.Serializable
utils.Copyable
// IsNLM is a marker method to prevent unintentional type checks (interfaces of same signature)
IsNLM()
// CreateBuilder creates a NLMBuilder
CreateNLMBuilder() NLMBuilder
}
// NLMContract provides a set of functions which can be overwritten by a sub struct
type NLMContract interface {
// GetIsVendorProprietaryMessage returns IsVendorProprietaryMessage (virtual field)
GetIsVendorProprietaryMessage() bool
// GetApduLength() returns a parser argument
GetApduLength() uint16
// IsNLM is a marker method to prevent unintentional type checks (interfaces of same signature)
IsNLM()
// CreateBuilder creates a NLMBuilder
CreateNLMBuilder() NLMBuilder
}
// NLMRequirements provides a set of functions which need to be implemented by a sub struct
type NLMRequirements interface {
GetLengthInBits(ctx context.Context) uint16
GetLengthInBytes(ctx context.Context) uint16
// GetIsVendorProprietaryMessage returns IsVendorProprietaryMessage (discriminator field)
GetIsVendorProprietaryMessage() bool
// GetMessageType returns MessageType (discriminator field)
GetMessageType() uint8
}
// _NLM is the data-structure of this message
type _NLM struct {
_SubType interface {
NLMContract
NLMRequirements
}
// Arguments.
ApduLength uint16
}
var _ NLMContract = (*_NLM)(nil)
// NewNLM factory function for _NLM
func NewNLM(apduLength uint16) *_NLM {
return &_NLM{ApduLength: apduLength}
}
///////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////
/////////////////////// Builder
///////////////////////
// NLMBuilder is a builder for NLM
type NLMBuilder interface {
utils.Copyable
// WithMandatoryFields adds all mandatory fields (convenience for using multiple builder calls)
WithMandatoryFields() NLMBuilder
// WithArgApduLength sets a parser argument
WithArgApduLength(uint16) NLMBuilder
// AsNLMWhoIsRouterToNetwork converts this build to a subType of NLM. It is always possible to return to current builder using Done()
AsNLMWhoIsRouterToNetwork() NLMWhoIsRouterToNetworkBuilder
// AsNLMIAmRouterToNetwork converts this build to a subType of NLM. It is always possible to return to current builder using Done()
AsNLMIAmRouterToNetwork() NLMIAmRouterToNetworkBuilder
// AsNLMICouldBeRouterToNetwork converts this build to a subType of NLM. It is always possible to return to current builder using Done()
AsNLMICouldBeRouterToNetwork() NLMICouldBeRouterToNetworkBuilder
// AsNLMRejectMessageToNetwork converts this build to a subType of NLM. It is always possible to return to current builder using Done()
AsNLMRejectMessageToNetwork() NLMRejectMessageToNetworkBuilder
// AsNLMRouterBusyToNetwork converts this build to a subType of NLM. It is always possible to return to current builder using Done()
AsNLMRouterBusyToNetwork() NLMRouterBusyToNetworkBuilder
// AsNLMRouterAvailableToNetwork converts this build to a subType of NLM. It is always possible to return to current builder using Done()
AsNLMRouterAvailableToNetwork() NLMRouterAvailableToNetworkBuilder
// AsNLMInitializeRoutingTable converts this build to a subType of NLM. It is always possible to return to current builder using Done()
AsNLMInitializeRoutingTable() NLMInitializeRoutingTableBuilder
// AsNLMInitializeRoutingTableAck converts this build to a subType of NLM. It is always possible to return to current builder using Done()
AsNLMInitializeRoutingTableAck() NLMInitializeRoutingTableAckBuilder
// AsNLMEstablishConnectionToNetwork converts this build to a subType of NLM. It is always possible to return to current builder using Done()
AsNLMEstablishConnectionToNetwork() NLMEstablishConnectionToNetworkBuilder
// AsNLMDisconnectConnectionToNetwork converts this build to a subType of NLM. It is always possible to return to current builder using Done()
AsNLMDisconnectConnectionToNetwork() NLMDisconnectConnectionToNetworkBuilder
// AsNLMChallengeRequest converts this build to a subType of NLM. It is always possible to return to current builder using Done()
AsNLMChallengeRequest() NLMChallengeRequestBuilder
// AsNLMSecurityPayload converts this build to a subType of NLM. It is always possible to return to current builder using Done()
AsNLMSecurityPayload() NLMSecurityPayloadBuilder
// AsNLMSecurityResponse converts this build to a subType of NLM. It is always possible to return to current builder using Done()
AsNLMSecurityResponse() NLMSecurityResponseBuilder
// AsNLMRequestKeyUpdate converts this build to a subType of NLM. It is always possible to return to current builder using Done()
AsNLMRequestKeyUpdate() NLMRequestKeyUpdateBuilder
// AsNLMUpdateKeyUpdate converts this build to a subType of NLM. It is always possible to return to current builder using Done()
AsNLMUpdateKeyUpdate() NLMUpdateKeyUpdateBuilder
// AsNLMUpdateKeyDistributionKey converts this build to a subType of NLM. It is always possible to return to current builder using Done()
AsNLMUpdateKeyDistributionKey() NLMUpdateKeyDistributionKeyBuilder
// AsNLMRequestMasterKey converts this build to a subType of NLM. It is always possible to return to current builder using Done()
AsNLMRequestMasterKey() NLMRequestMasterKeyBuilder
// AsNLMSetMasterKey converts this build to a subType of NLM. It is always possible to return to current builder using Done()
AsNLMSetMasterKey() NLMSetMasterKeyBuilder
// AsNLMWhatIsNetworkNumber converts this build to a subType of NLM. It is always possible to return to current builder using Done()
AsNLMWhatIsNetworkNumber() NLMWhatIsNetworkNumberBuilder
// AsNLMNetworkNumberIs converts this build to a subType of NLM. It is always possible to return to current builder using Done()
AsNLMNetworkNumberIs() NLMNetworkNumberIsBuilder
// AsNLMReserved converts this build to a subType of NLM. It is always possible to return to current builder using Done()
AsNLMReserved() NLMReservedBuilder
// AsNLMVendorProprietaryMessage converts this build to a subType of NLM. It is always possible to return to current builder using Done()
AsNLMVendorProprietaryMessage() NLMVendorProprietaryMessageBuilder
// Build builds the NLM or returns an error if something is wrong
PartialBuild() (NLMContract, error)
// MustBuild does the same as Build but panics on error
PartialMustBuild() NLMContract
// Build builds the NLM or returns an error if something is wrong
Build() (NLM, error)
// MustBuild does the same as Build but panics on error
MustBuild() NLM
}
// NewNLMBuilder() creates a NLMBuilder
func NewNLMBuilder() NLMBuilder {
return &_NLMBuilder{_NLM: new(_NLM)}
}
type _NLMChildBuilder interface {
utils.Copyable
setParent(NLMContract)
buildForNLM() (NLM, error)
}
type _NLMBuilder struct {
*_NLM
childBuilder _NLMChildBuilder
err *utils.MultiError
}
var _ (NLMBuilder) = (*_NLMBuilder)(nil)
func (b *_NLMBuilder) WithMandatoryFields() NLMBuilder {
return b
}
func (b *_NLMBuilder) WithArgApduLength(apduLength uint16) NLMBuilder {
b.ApduLength = apduLength
return b
}
func (b *_NLMBuilder) PartialBuild() (NLMContract, error) {
if b.err != nil {
return nil, errors.Wrap(b.err, "error occurred during build")
}
return b._NLM.deepCopy(), nil
}
func (b *_NLMBuilder) PartialMustBuild() NLMContract {
build, err := b.PartialBuild()
if err != nil {
panic(err)
}
return build
}
func (b *_NLMBuilder) AsNLMWhoIsRouterToNetwork() NLMWhoIsRouterToNetworkBuilder {
if cb, ok := b.childBuilder.(NLMWhoIsRouterToNetworkBuilder); ok {
return cb
}
cb := NewNLMWhoIsRouterToNetworkBuilder().(*_NLMWhoIsRouterToNetworkBuilder)
cb.parentBuilder = b
b.childBuilder = cb
return cb
}
func (b *_NLMBuilder) AsNLMIAmRouterToNetwork() NLMIAmRouterToNetworkBuilder {
if cb, ok := b.childBuilder.(NLMIAmRouterToNetworkBuilder); ok {
return cb
}
cb := NewNLMIAmRouterToNetworkBuilder().(*_NLMIAmRouterToNetworkBuilder)
cb.parentBuilder = b
b.childBuilder = cb
return cb
}
func (b *_NLMBuilder) AsNLMICouldBeRouterToNetwork() NLMICouldBeRouterToNetworkBuilder {
if cb, ok := b.childBuilder.(NLMICouldBeRouterToNetworkBuilder); ok {
return cb
}
cb := NewNLMICouldBeRouterToNetworkBuilder().(*_NLMICouldBeRouterToNetworkBuilder)
cb.parentBuilder = b
b.childBuilder = cb
return cb
}
func (b *_NLMBuilder) AsNLMRejectMessageToNetwork() NLMRejectMessageToNetworkBuilder {
if cb, ok := b.childBuilder.(NLMRejectMessageToNetworkBuilder); ok {
return cb
}
cb := NewNLMRejectMessageToNetworkBuilder().(*_NLMRejectMessageToNetworkBuilder)
cb.parentBuilder = b
b.childBuilder = cb
return cb
}
func (b *_NLMBuilder) AsNLMRouterBusyToNetwork() NLMRouterBusyToNetworkBuilder {
if cb, ok := b.childBuilder.(NLMRouterBusyToNetworkBuilder); ok {
return cb
}
cb := NewNLMRouterBusyToNetworkBuilder().(*_NLMRouterBusyToNetworkBuilder)
cb.parentBuilder = b
b.childBuilder = cb
return cb
}
func (b *_NLMBuilder) AsNLMRouterAvailableToNetwork() NLMRouterAvailableToNetworkBuilder {
if cb, ok := b.childBuilder.(NLMRouterAvailableToNetworkBuilder); ok {
return cb
}
cb := NewNLMRouterAvailableToNetworkBuilder().(*_NLMRouterAvailableToNetworkBuilder)
cb.parentBuilder = b
b.childBuilder = cb
return cb
}
func (b *_NLMBuilder) AsNLMInitializeRoutingTable() NLMInitializeRoutingTableBuilder {
if cb, ok := b.childBuilder.(NLMInitializeRoutingTableBuilder); ok {
return cb
}
cb := NewNLMInitializeRoutingTableBuilder().(*_NLMInitializeRoutingTableBuilder)
cb.parentBuilder = b
b.childBuilder = cb
return cb
}
func (b *_NLMBuilder) AsNLMInitializeRoutingTableAck() NLMInitializeRoutingTableAckBuilder {
if cb, ok := b.childBuilder.(NLMInitializeRoutingTableAckBuilder); ok {
return cb
}
cb := NewNLMInitializeRoutingTableAckBuilder().(*_NLMInitializeRoutingTableAckBuilder)
cb.parentBuilder = b
b.childBuilder = cb
return cb
}
func (b *_NLMBuilder) AsNLMEstablishConnectionToNetwork() NLMEstablishConnectionToNetworkBuilder {
if cb, ok := b.childBuilder.(NLMEstablishConnectionToNetworkBuilder); ok {
return cb
}
cb := NewNLMEstablishConnectionToNetworkBuilder().(*_NLMEstablishConnectionToNetworkBuilder)
cb.parentBuilder = b
b.childBuilder = cb
return cb
}
func (b *_NLMBuilder) AsNLMDisconnectConnectionToNetwork() NLMDisconnectConnectionToNetworkBuilder {
if cb, ok := b.childBuilder.(NLMDisconnectConnectionToNetworkBuilder); ok {
return cb
}
cb := NewNLMDisconnectConnectionToNetworkBuilder().(*_NLMDisconnectConnectionToNetworkBuilder)
cb.parentBuilder = b
b.childBuilder = cb
return cb
}
func (b *_NLMBuilder) AsNLMChallengeRequest() NLMChallengeRequestBuilder {
if cb, ok := b.childBuilder.(NLMChallengeRequestBuilder); ok {
return cb
}
cb := NewNLMChallengeRequestBuilder().(*_NLMChallengeRequestBuilder)
cb.parentBuilder = b
b.childBuilder = cb
return cb
}
func (b *_NLMBuilder) AsNLMSecurityPayload() NLMSecurityPayloadBuilder {
if cb, ok := b.childBuilder.(NLMSecurityPayloadBuilder); ok {
return cb
}
cb := NewNLMSecurityPayloadBuilder().(*_NLMSecurityPayloadBuilder)
cb.parentBuilder = b
b.childBuilder = cb
return cb
}
func (b *_NLMBuilder) AsNLMSecurityResponse() NLMSecurityResponseBuilder {
if cb, ok := b.childBuilder.(NLMSecurityResponseBuilder); ok {
return cb
}
cb := NewNLMSecurityResponseBuilder().(*_NLMSecurityResponseBuilder)
cb.parentBuilder = b
b.childBuilder = cb
return cb
}
func (b *_NLMBuilder) AsNLMRequestKeyUpdate() NLMRequestKeyUpdateBuilder {
if cb, ok := b.childBuilder.(NLMRequestKeyUpdateBuilder); ok {
return cb
}
cb := NewNLMRequestKeyUpdateBuilder().(*_NLMRequestKeyUpdateBuilder)
cb.parentBuilder = b
b.childBuilder = cb
return cb
}
func (b *_NLMBuilder) AsNLMUpdateKeyUpdate() NLMUpdateKeyUpdateBuilder {
if cb, ok := b.childBuilder.(NLMUpdateKeyUpdateBuilder); ok {
return cb
}
cb := NewNLMUpdateKeyUpdateBuilder().(*_NLMUpdateKeyUpdateBuilder)
cb.parentBuilder = b
b.childBuilder = cb
return cb
}
func (b *_NLMBuilder) AsNLMUpdateKeyDistributionKey() NLMUpdateKeyDistributionKeyBuilder {
if cb, ok := b.childBuilder.(NLMUpdateKeyDistributionKeyBuilder); ok {
return cb
}
cb := NewNLMUpdateKeyDistributionKeyBuilder().(*_NLMUpdateKeyDistributionKeyBuilder)
cb.parentBuilder = b
b.childBuilder = cb
return cb
}
func (b *_NLMBuilder) AsNLMRequestMasterKey() NLMRequestMasterKeyBuilder {
if cb, ok := b.childBuilder.(NLMRequestMasterKeyBuilder); ok {
return cb
}
cb := NewNLMRequestMasterKeyBuilder().(*_NLMRequestMasterKeyBuilder)
cb.parentBuilder = b
b.childBuilder = cb
return cb
}
func (b *_NLMBuilder) AsNLMSetMasterKey() NLMSetMasterKeyBuilder {
if cb, ok := b.childBuilder.(NLMSetMasterKeyBuilder); ok {
return cb
}
cb := NewNLMSetMasterKeyBuilder().(*_NLMSetMasterKeyBuilder)
cb.parentBuilder = b
b.childBuilder = cb
return cb
}
func (b *_NLMBuilder) AsNLMWhatIsNetworkNumber() NLMWhatIsNetworkNumberBuilder {
if cb, ok := b.childBuilder.(NLMWhatIsNetworkNumberBuilder); ok {
return cb
}
cb := NewNLMWhatIsNetworkNumberBuilder().(*_NLMWhatIsNetworkNumberBuilder)
cb.parentBuilder = b
b.childBuilder = cb
return cb
}
func (b *_NLMBuilder) AsNLMNetworkNumberIs() NLMNetworkNumberIsBuilder {
if cb, ok := b.childBuilder.(NLMNetworkNumberIsBuilder); ok {
return cb
}
cb := NewNLMNetworkNumberIsBuilder().(*_NLMNetworkNumberIsBuilder)
cb.parentBuilder = b
b.childBuilder = cb
return cb
}
func (b *_NLMBuilder) AsNLMReserved() NLMReservedBuilder {
if cb, ok := b.childBuilder.(NLMReservedBuilder); ok {
return cb
}
cb := NewNLMReservedBuilder().(*_NLMReservedBuilder)
cb.parentBuilder = b
b.childBuilder = cb
return cb
}
func (b *_NLMBuilder) AsNLMVendorProprietaryMessage() NLMVendorProprietaryMessageBuilder {
if cb, ok := b.childBuilder.(NLMVendorProprietaryMessageBuilder); ok {
return cb
}
cb := NewNLMVendorProprietaryMessageBuilder().(*_NLMVendorProprietaryMessageBuilder)
cb.parentBuilder = b
b.childBuilder = cb
return cb
}
func (b *_NLMBuilder) Build() (NLM, 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.buildForNLM()
}
func (b *_NLMBuilder) MustBuild() NLM {
build, err := b.Build()
if err != nil {
panic(err)
}
return build
}
func (b *_NLMBuilder) DeepCopy() any {
_copy := b.CreateNLMBuilder().(*_NLMBuilder)
_copy.childBuilder = b.childBuilder.DeepCopy().(_NLMChildBuilder)
_copy.childBuilder.setParent(_copy)
if b.err != nil {
_copy.err = b.err.DeepCopy().(*utils.MultiError)
}
return _copy
}
// CreateNLMBuilder creates a NLMBuilder
func (b *_NLM) CreateNLMBuilder() NLMBuilder {
if b == nil {
return NewNLMBuilder()
}
return &_NLMBuilder{_NLM: b.deepCopy()}
}
///////////////////////
///////////////////////
///////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////
/////////////////////// Accessors for virtual fields.
///////////////////////
func (pm *_NLM) GetIsVendorProprietaryMessage() bool {
m := pm._SubType
ctx := context.Background()
_ = ctx
return bool(bool((m.GetMessageType()) >= (128)))
}
///////////////////////
///////////////////////
///////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////
// Deprecated: use the interface for direct cast
func CastNLM(structType any) NLM {
if casted, ok := structType.(NLM); ok {
return casted
}
if casted, ok := structType.(*NLM); ok {
return *casted
}
return nil
}
func (m *_NLM) GetTypeName() string {
return "NLM"
}
func (m *_NLM) getLengthInBits(ctx context.Context) uint16 {
lengthInBits := uint16(0)
// Discriminator Field (messageType)
lengthInBits += 8
// A virtual field doesn't have any in- or output.
return lengthInBits
}
func (m *_NLM) GetLengthInBits(ctx context.Context) uint16 {
return m._SubType.GetLengthInBits(ctx)
}
func (m *_NLM) GetLengthInBytes(ctx context.Context) uint16 {
return m._SubType.GetLengthInBits(ctx) / 8
}
func NLMParse[T NLM](ctx context.Context, theBytes []byte, apduLength uint16) (T, error) {
return NLMParseWithBuffer[T](ctx, utils.NewReadBufferByteBased(theBytes), apduLength)
}
func NLMParseWithBufferProducer[T NLM](apduLength uint16) func(ctx context.Context, readBuffer utils.ReadBuffer) (T, error) {
return func(ctx context.Context, readBuffer utils.ReadBuffer) (T, error) {
v, err := NLMParseWithBuffer[T](ctx, readBuffer, apduLength)
if err != nil {
var zero T
return zero, err
}
return v, nil
}
}
func NLMParseWithBuffer[T NLM](ctx context.Context, readBuffer utils.ReadBuffer, apduLength uint16) (T, error) {
v, err := (&_NLM{ApduLength: apduLength}).parse(ctx, readBuffer, apduLength)
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 *_NLM) parse(ctx context.Context, readBuffer utils.ReadBuffer, apduLength uint16) (__nLM NLM, err error) {
positionAware := readBuffer
_ = positionAware
if pullErr := readBuffer.PullContext("NLM"); pullErr != nil {
return nil, errors.Wrap(pullErr, "Error pulling for NLM")
}
currentPos := positionAware.GetPos()
_ = currentPos
messageType, err := ReadDiscriminatorField[uint8](ctx, "messageType", ReadUnsignedByte(readBuffer, uint8(8)))
if err != nil {
return nil, errors.Wrap(err, fmt.Sprintf("Error parsing 'messageType' field"))
}
isVendorProprietaryMessage, err := ReadVirtualField[bool](ctx, "isVendorProprietaryMessage", (*bool)(nil), bool((messageType) >= (128)))
if err != nil {
return nil, errors.Wrap(err, fmt.Sprintf("Error parsing 'isVendorProprietaryMessage' field"))
}
_ = isVendorProprietaryMessage
// Switch Field (Depending on the discriminator values, passes the instantiation to a sub-type)
var _child NLM
switch {
case messageType == 0x00: // NLMWhoIsRouterToNetwork
if _child, err = new(_NLMWhoIsRouterToNetwork).parse(ctx, readBuffer, m, apduLength); err != nil {
return nil, errors.Wrap(err, "Error parsing sub-type NLMWhoIsRouterToNetwork for type-switch of NLM")
}
case messageType == 0x01: // NLMIAmRouterToNetwork
if _child, err = new(_NLMIAmRouterToNetwork).parse(ctx, readBuffer, m, apduLength); err != nil {
return nil, errors.Wrap(err, "Error parsing sub-type NLMIAmRouterToNetwork for type-switch of NLM")
}
case messageType == 0x02: // NLMICouldBeRouterToNetwork
if _child, err = new(_NLMICouldBeRouterToNetwork).parse(ctx, readBuffer, m, apduLength); err != nil {
return nil, errors.Wrap(err, "Error parsing sub-type NLMICouldBeRouterToNetwork for type-switch of NLM")
}
case messageType == 0x03: // NLMRejectMessageToNetwork
if _child, err = new(_NLMRejectMessageToNetwork).parse(ctx, readBuffer, m, apduLength); err != nil {
return nil, errors.Wrap(err, "Error parsing sub-type NLMRejectMessageToNetwork for type-switch of NLM")
}
case messageType == 0x04: // NLMRouterBusyToNetwork
if _child, err = new(_NLMRouterBusyToNetwork).parse(ctx, readBuffer, m, apduLength); err != nil {
return nil, errors.Wrap(err, "Error parsing sub-type NLMRouterBusyToNetwork for type-switch of NLM")
}
case messageType == 0x05: // NLMRouterAvailableToNetwork
if _child, err = new(_NLMRouterAvailableToNetwork).parse(ctx, readBuffer, m, apduLength); err != nil {
return nil, errors.Wrap(err, "Error parsing sub-type NLMRouterAvailableToNetwork for type-switch of NLM")
}
case messageType == 0x06: // NLMInitializeRoutingTable
if _child, err = new(_NLMInitializeRoutingTable).parse(ctx, readBuffer, m, apduLength); err != nil {
return nil, errors.Wrap(err, "Error parsing sub-type NLMInitializeRoutingTable for type-switch of NLM")
}
case messageType == 0x07: // NLMInitializeRoutingTableAck
if _child, err = new(_NLMInitializeRoutingTableAck).parse(ctx, readBuffer, m, apduLength); err != nil {
return nil, errors.Wrap(err, "Error parsing sub-type NLMInitializeRoutingTableAck for type-switch of NLM")
}
case messageType == 0x08: // NLMEstablishConnectionToNetwork
if _child, err = new(_NLMEstablishConnectionToNetwork).parse(ctx, readBuffer, m, apduLength); err != nil {
return nil, errors.Wrap(err, "Error parsing sub-type NLMEstablishConnectionToNetwork for type-switch of NLM")
}
case messageType == 0x09: // NLMDisconnectConnectionToNetwork
if _child, err = new(_NLMDisconnectConnectionToNetwork).parse(ctx, readBuffer, m, apduLength); err != nil {
return nil, errors.Wrap(err, "Error parsing sub-type NLMDisconnectConnectionToNetwork for type-switch of NLM")
}
case messageType == 0x0A: // NLMChallengeRequest
if _child, err = new(_NLMChallengeRequest).parse(ctx, readBuffer, m, apduLength); err != nil {
return nil, errors.Wrap(err, "Error parsing sub-type NLMChallengeRequest for type-switch of NLM")
}
case messageType == 0x0B: // NLMSecurityPayload
if _child, err = new(_NLMSecurityPayload).parse(ctx, readBuffer, m, apduLength); err != nil {
return nil, errors.Wrap(err, "Error parsing sub-type NLMSecurityPayload for type-switch of NLM")
}
case messageType == 0x0C: // NLMSecurityResponse
if _child, err = new(_NLMSecurityResponse).parse(ctx, readBuffer, m, apduLength); err != nil {
return nil, errors.Wrap(err, "Error parsing sub-type NLMSecurityResponse for type-switch of NLM")
}
case messageType == 0x0D: // NLMRequestKeyUpdate
if _child, err = new(_NLMRequestKeyUpdate).parse(ctx, readBuffer, m, apduLength); err != nil {
return nil, errors.Wrap(err, "Error parsing sub-type NLMRequestKeyUpdate for type-switch of NLM")
}
case messageType == 0x0E: // NLMUpdateKeyUpdate
if _child, err = new(_NLMUpdateKeyUpdate).parse(ctx, readBuffer, m, apduLength); err != nil {
return nil, errors.Wrap(err, "Error parsing sub-type NLMUpdateKeyUpdate for type-switch of NLM")
}
case messageType == 0x0F: // NLMUpdateKeyDistributionKey
if _child, err = new(_NLMUpdateKeyDistributionKey).parse(ctx, readBuffer, m, apduLength); err != nil {
return nil, errors.Wrap(err, "Error parsing sub-type NLMUpdateKeyDistributionKey for type-switch of NLM")
}
case messageType == 0x10: // NLMRequestMasterKey
if _child, err = new(_NLMRequestMasterKey).parse(ctx, readBuffer, m, apduLength); err != nil {
return nil, errors.Wrap(err, "Error parsing sub-type NLMRequestMasterKey for type-switch of NLM")
}
case messageType == 0x11: // NLMSetMasterKey
if _child, err = new(_NLMSetMasterKey).parse(ctx, readBuffer, m, apduLength); err != nil {
return nil, errors.Wrap(err, "Error parsing sub-type NLMSetMasterKey for type-switch of NLM")
}
case messageType == 0x12: // NLMWhatIsNetworkNumber
if _child, err = new(_NLMWhatIsNetworkNumber).parse(ctx, readBuffer, m, apduLength); err != nil {
return nil, errors.Wrap(err, "Error parsing sub-type NLMWhatIsNetworkNumber for type-switch of NLM")
}
case messageType == 0x13: // NLMNetworkNumberIs
if _child, err = new(_NLMNetworkNumberIs).parse(ctx, readBuffer, m, apduLength); err != nil {
return nil, errors.Wrap(err, "Error parsing sub-type NLMNetworkNumberIs for type-switch of NLM")
}
case 0 == 0 && isVendorProprietaryMessage == bool(false): // NLMReserved
if _child, err = new(_NLMReserved).parse(ctx, readBuffer, m, apduLength); err != nil {
return nil, errors.Wrap(err, "Error parsing sub-type NLMReserved for type-switch of NLM")
}
case 0 == 0: // NLMVendorProprietaryMessage
if _child, err = new(_NLMVendorProprietaryMessage).parse(ctx, readBuffer, m, apduLength); err != nil {
return nil, errors.Wrap(err, "Error parsing sub-type NLMVendorProprietaryMessage for type-switch of NLM")
}
default:
return nil, errors.Errorf("Unmapped type for parameters [messageType=%v, isVendorProprietaryMessage=%v]", messageType, isVendorProprietaryMessage)
}
if closeErr := readBuffer.CloseContext("NLM"); closeErr != nil {
return nil, errors.Wrap(closeErr, "Error closing for NLM")
}
return _child, nil
}
func (pm *_NLM) serializeParent(ctx context.Context, writeBuffer utils.WriteBuffer, child NLM, 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("NLM"); pushErr != nil {
return errors.Wrap(pushErr, "Error pushing for NLM")
}
if err := WriteDiscriminatorField(ctx, "messageType", m.GetMessageType(), WriteUnsignedByte(writeBuffer, 8)); err != nil {
return errors.Wrap(err, "Error serializing 'messageType' field")
}
// Virtual field
isVendorProprietaryMessage := m.GetIsVendorProprietaryMessage()
_ = isVendorProprietaryMessage
if _isVendorProprietaryMessageErr := writeBuffer.WriteVirtual(ctx, "isVendorProprietaryMessage", m.GetIsVendorProprietaryMessage()); _isVendorProprietaryMessageErr != nil {
return errors.Wrap(_isVendorProprietaryMessageErr, "Error serializing 'isVendorProprietaryMessage' 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("NLM"); popErr != nil {
return errors.Wrap(popErr, "Error popping for NLM")
}
return nil
}
////
// Arguments Getter
func (m *_NLM) GetApduLength() uint16 {
return m.ApduLength
}
//
////
func (m *_NLM) IsNLM() {}
func (m *_NLM) DeepCopy() any {
return m.deepCopy()
}
func (m *_NLM) deepCopy() *_NLM {
if m == nil {
return nil
}
_NLMCopy := &_NLM{
nil, // will be set by child
m.ApduLength,
}
return _NLMCopy
}