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/07/01 14:01:39 UTC

[plc4x] 02/06: feat(codegen/plc4go): when a sub-type parse match fails output the actual values

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

commit a7504a6f4e4865e913c1ee92aecfa6352c2c3a53
Author: Sebastian Rühl <sr...@apache.org>
AuthorDate: Fri Jul 1 12:05:19 2022 +0200

    feat(codegen/plc4go): when a sub-type parse match fails output the actual values
---
 .../src/main/resources/templates/go/complex-type-template.go.ftlh    | 5 ++---
 .../language/mspec/model/terms/DefaultVariableLiteral.java           | 2 +-
 plc4go/protocols/abeth/readwrite/model/CIPEncapsulationPacket.go     | 5 ++---
 plc4go/protocols/abeth/readwrite/model/DF1RequestCommand.go          | 5 ++---
 plc4go/protocols/abeth/readwrite/model/DF1RequestMessage.go          | 5 ++---
 plc4go/protocols/abeth/readwrite/model/DF1ResponseMessage.go         | 5 ++---
 plc4go/protocols/ads/readwrite/model/AdsData.go                      | 5 ++---
 plc4go/protocols/ads/readwrite/model/AdsMultiRequestItem.go          | 5 ++---
 plc4go/protocols/bacnetip/readwrite/model/APDU.go                    | 5 ++---
 plc4go/protocols/bacnetip/readwrite/model/BACnetApplicationTag.go    | 5 ++---
 plc4go/protocols/bacnetip/readwrite/model/BACnetCalendarEntry.go     | 5 ++---
 plc4go/protocols/bacnetip/readwrite/model/BACnetChannelValue.go      | 5 ++---
 plc4go/protocols/bacnetip/readwrite/model/BACnetClientCOV.go         | 5 ++---
 .../bacnetip/readwrite/model/BACnetConfirmedServiceRequest.go        | 5 ++---
 .../BACnetConfirmedServiceRequestAtomicReadFileStreamOrRecord.go     | 5 ++---
 .../BACnetConfirmedServiceRequestConfirmedTextMessageMessageClass.go | 5 ++---
 .../readwrite/model/BACnetConfirmedServiceRequestReadRangeRange.go   | 5 ++---
 plc4go/protocols/bacnetip/readwrite/model/BACnetConstructedData.go   | 5 ++---
 plc4go/protocols/bacnetip/readwrite/model/BACnetContextTag.go        | 5 ++---
 plc4go/protocols/bacnetip/readwrite/model/BACnetError.go             | 5 ++---
 .../bacnetip/readwrite/model/BACnetEventLogRecordLogDatum.go         | 5 ++---
 plc4go/protocols/bacnetip/readwrite/model/BACnetEventParameter.go    | 5 ++---
 .../readwrite/model/BACnetEventParameterChangeOfValueCivCriteria.go  | 5 ++---
 plc4go/protocols/bacnetip/readwrite/model/BACnetFaultParameter.go    | 5 ++---
 .../model/BACnetFaultParameterFaultExtendedParametersEntry.go        | 5 ++---
 .../model/BACnetFaultParameterFaultOutOfRangeMaxNormalValue.go       | 5 ++---
 .../model/BACnetFaultParameterFaultOutOfRangeMinNormalValue.go       | 5 ++---
 plc4go/protocols/bacnetip/readwrite/model/BACnetHostAddress.go       | 5 ++---
 .../bacnetip/readwrite/model/BACnetLandingCallStatusCommand.go       | 5 ++---
 plc4go/protocols/bacnetip/readwrite/model/BACnetLogData.go           | 5 ++---
 .../protocols/bacnetip/readwrite/model/BACnetLogDataLogDataEntry.go  | 5 ++---
 plc4go/protocols/bacnetip/readwrite/model/BACnetLogRecordLogDatum.go | 5 ++---
 .../bacnetip/readwrite/model/BACnetNotificationParameters.go         | 5 ++---
 .../BACnetNotificationParametersChangeOfDiscreteValueNewValue.go     | 5 ++---
 .../model/BACnetNotificationParametersChangeOfValueNewValue.go       | 5 ++---
 plc4go/protocols/bacnetip/readwrite/model/BACnetOptionalBinaryPV.go  | 5 ++---
 .../bacnetip/readwrite/model/BACnetOptionalCharacterString.go        | 5 ++---
 plc4go/protocols/bacnetip/readwrite/model/BACnetOptionalREAL.go      | 5 ++---
 plc4go/protocols/bacnetip/readwrite/model/BACnetOptionalUnsigned.go  | 5 ++---
 plc4go/protocols/bacnetip/readwrite/model/BACnetPriorityValue.go     | 5 ++---
 .../protocols/bacnetip/readwrite/model/BACnetProcessIdSelection.go   | 5 ++---
 .../readwrite/model/BACnetPropertyAccessResultAccessResult.go        | 5 ++---
 plc4go/protocols/bacnetip/readwrite/model/BACnetPropertyStates.go    | 5 ++---
 plc4go/protocols/bacnetip/readwrite/model/BACnetRecipient.go         | 5 ++---
 plc4go/protocols/bacnetip/readwrite/model/BACnetScale.go             | 5 ++---
 plc4go/protocols/bacnetip/readwrite/model/BACnetServiceAck.go        | 5 ++---
 .../readwrite/model/BACnetServiceAckAtomicReadFileStreamOrRecord.go  | 5 ++---
 plc4go/protocols/bacnetip/readwrite/model/BACnetShedLevel.go         | 5 ++---
 .../protocols/bacnetip/readwrite/model/BACnetSpecialEventPeriod.go   | 5 ++---
 plc4go/protocols/bacnetip/readwrite/model/BACnetTimeStamp.go         | 5 ++---
 .../bacnetip/readwrite/model/BACnetTimerStateChangeValue.go          | 5 ++---
 .../bacnetip/readwrite/model/BACnetUnconfirmedServiceRequest.go      | 5 ++---
 .../readwrite/model/BACnetUnconfirmedServiceRequestWhoHasObject.go   | 5 ++---
 plc4go/protocols/bacnetip/readwrite/model/BACnetValueSource.go       | 5 ++---
 plc4go/protocols/bacnetip/readwrite/model/BVLC.go                    | 5 ++---
 plc4go/protocols/bacnetip/readwrite/model/NLM.go                     | 5 ++---
 plc4go/protocols/cbus/readwrite/model/CALData.go                     | 5 ++---
 plc4go/protocols/cbus/readwrite/model/CALReply.go                    | 5 ++---
 plc4go/protocols/cbus/readwrite/model/CBusCommand.go                 | 5 ++---
 plc4go/protocols/cbus/readwrite/model/CBusMessage.go                 | 5 ++---
 .../protocols/cbus/readwrite/model/CBusPointToMultiPointCommand.go   | 5 ++---
 plc4go/protocols/cbus/readwrite/model/CBusPointToPointCommand.go     | 5 ++---
 .../cbus/readwrite/model/CBusPointToPointToMultipointCommand.go      | 5 ++---
 plc4go/protocols/cbus/readwrite/model/Confirmation.go                | 5 ++---
 plc4go/protocols/cbus/readwrite/model/IdentifyReplyCommand.go        | 5 ++---
 plc4go/protocols/cbus/readwrite/model/MonitoredSAL.go                | 5 ++---
 plc4go/protocols/cbus/readwrite/model/Reply.go                       | 5 ++---
 plc4go/protocols/cbus/readwrite/model/Request.go                     | 5 ++---
 plc4go/protocols/cbus/readwrite/model/SALData.go                     | 5 ++---
 plc4go/protocols/cbus/readwrite/model/StatusRequest.go               | 5 ++---
 plc4go/protocols/df1/readwrite/model/DF1Command.go                   | 5 ++---
 plc4go/protocols/df1/readwrite/model/DF1Symbol.go                    | 5 ++---
 plc4go/protocols/eip/readwrite/model/CipService.go                   | 5 ++---
 plc4go/protocols/eip/readwrite/model/EipPacket.go                    | 5 ++---
 plc4go/protocols/firmata/readwrite/model/FirmataCommand.go           | 5 ++---
 plc4go/protocols/firmata/readwrite/model/FirmataMessage.go           | 5 ++---
 plc4go/protocols/firmata/readwrite/model/SysexCommand.go             | 5 ++---
 plc4go/protocols/knxnetip/readwrite/model/Apdu.go                    | 5 ++---
 plc4go/protocols/knxnetip/readwrite/model/ApduControl.go             | 5 ++---
 plc4go/protocols/knxnetip/readwrite/model/ApduData.go                | 5 ++---
 plc4go/protocols/knxnetip/readwrite/model/ApduDataExt.go             | 5 ++---
 plc4go/protocols/knxnetip/readwrite/model/CEMI.go                    | 5 ++---
 .../protocols/knxnetip/readwrite/model/CEMIAdditionalInformation.go  | 5 ++---
 plc4go/protocols/knxnetip/readwrite/model/ComObjectTable.go          | 5 ++---
 .../knxnetip/readwrite/model/ConnectionRequestInformation.go         | 5 ++---
 .../knxnetip/readwrite/model/ConnectionResponseDataBlock.go          | 5 ++---
 plc4go/protocols/knxnetip/readwrite/model/KnxGroupAddress.go         | 5 ++---
 plc4go/protocols/knxnetip/readwrite/model/KnxNetIpMessage.go         | 5 ++---
 plc4go/protocols/knxnetip/readwrite/model/LDataFrame.go              | 5 ++---
 plc4go/protocols/knxnetip/readwrite/model/ServiceId.go               | 5 ++---
 plc4go/protocols/modbus/readwrite/model/ModbusADU.go                 | 5 ++---
 plc4go/protocols/modbus/readwrite/model/ModbusPDU.go                 | 5 ++---
 plc4go/protocols/s7/readwrite/model/COTPPacket.go                    | 5 ++---
 plc4go/protocols/s7/readwrite/model/COTPParameter.go                 | 5 ++---
 plc4go/protocols/s7/readwrite/model/S7Address.go                     | 5 ++---
 plc4go/protocols/s7/readwrite/model/S7DataAlarmMessage.go            | 5 ++---
 plc4go/protocols/s7/readwrite/model/S7Message.go                     | 5 ++---
 plc4go/protocols/s7/readwrite/model/S7Parameter.go                   | 5 ++---
 plc4go/protocols/s7/readwrite/model/S7ParameterUserDataItem.go       | 5 ++---
 plc4go/protocols/s7/readwrite/model/S7Payload.go                     | 5 ++---
 plc4go/protocols/s7/readwrite/model/S7PayloadUserDataItem.go         | 5 ++---
 plc4go/protocols/s7/readwrite/model/S7VarRequestParameterItem.go     | 5 ++---
 102 files changed, 203 insertions(+), 304 deletions(-)

diff --git a/code-generation/language-go/src/main/resources/templates/go/complex-type-template.go.ftlh b/code-generation/language-go/src/main/resources/templates/go/complex-type-template.go.ftlh
index 2920cff9e..907acdf89 100644
--- a/code-generation/language-go/src/main/resources/templates/go/complex-type-template.go.ftlh
+++ b/code-generation/language-go/src/main/resources/templates/go/complex-type-template.go.ftlh
@@ -1390,11 +1390,10 @@ func ${type.name}Parse(readBuffer utils.ReadBuffer<#if hasParserArguments>, ${pa
 		_childTemp, typeSwitchError = ${case.name}Parse(readBuffer<#if case.allParserArguments.isPresent()>, <#list case.allParserArguments.orElseThrow() as parserArgument><#if <#--TODO: here DF1ResponseMessage throws a payloadLength not present: meaning that some feature is not rightfully implemented as the result should be a error not a missing pointer-->type.getPropertyFieldFromThisOrParentByName(parserArgument.name).isPresent() && type.getPropertyFieldFromThisOrParentByName(parserArgument. [...]
 				</#list>
 	default:
-		// TODO: return actual type
-		typeSwitchError = errors.New("Unmapped type")<@emitImport import="github.com/pkg/errors" />
+		typeSwitchError = errors.Errorf("Unmapped type for<#if switchField.getDiscriminatorExpressions()?has_content> parameters [<#list switchField.getDiscriminatorExpressions() as discriminatorExpression>${discriminatorExpression.stringRepresentation()}=%v<#sep>, </#sep></#list>]</#if>"<#if switchField.getDiscriminatorExpressions()?has_content>, <#list switchField.getDiscriminatorExpressions() as discriminatorExpression>${helper.toParseExpression(null, null, discriminatorExpression, parserAr [...]
 	}
 	if typeSwitchError != nil {
-		return nil, errors.Wrap(typeSwitchError, "Error parsing sub-type for type-switch.")<@emitImport import="github.com/pkg/errors" />
+		return nil, errors.Wrap(typeSwitchError, "Error parsing sub-type for type-switch of ${type.name}.")<@emitImport import="github.com/pkg/errors" />
 	}
 	_child = _childTemp.(${type.name}ChildSerializeRequirement)
 				<#break>
diff --git a/code-generation/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/model/terms/DefaultVariableLiteral.java b/code-generation/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/model/terms/DefaultVariableLiteral.java
index f7cad8b65..5e6c3458f 100644
--- a/code-generation/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/model/terms/DefaultVariableLiteral.java
+++ b/code-generation/protocol-base-mspec/src/main/java/org/apache/plc4x/plugins/codegenerator/language/mspec/model/terms/DefaultVariableLiteral.java
@@ -77,7 +77,7 @@ public class DefaultVariableLiteral implements VariableLiteral {
 
     @Override
     public String stringRepresentation() {
-        return "";
+        return name + getChild().map(Term::stringRepresentation).orElse("");
     }
 
     @Override
diff --git a/plc4go/protocols/abeth/readwrite/model/CIPEncapsulationPacket.go b/plc4go/protocols/abeth/readwrite/model/CIPEncapsulationPacket.go
index a6f2f0b3c..c76f81698 100644
--- a/plc4go/protocols/abeth/readwrite/model/CIPEncapsulationPacket.go
+++ b/plc4go/protocols/abeth/readwrite/model/CIPEncapsulationPacket.go
@@ -257,11 +257,10 @@ func CIPEncapsulationPacketParse(readBuffer utils.ReadBuffer) (CIPEncapsulationP
 	case commandType == 0x0207: // CIPEncapsulationReadResponse
 		_childTemp, typeSwitchError = CIPEncapsulationReadResponseParse(readBuffer, packetLen)
 	default:
-		// TODO: return actual type
-		typeSwitchError = errors.New("Unmapped type")
+		typeSwitchError = errors.Errorf("Unmapped type for parameters [commandType=%v]", commandType)
 	}
 	if typeSwitchError != nil {
-		return nil, errors.Wrap(typeSwitchError, "Error parsing sub-type for type-switch.")
+		return nil, errors.Wrap(typeSwitchError, "Error parsing sub-type for type-switch of CIPEncapsulationPacket.")
 	}
 	_child = _childTemp.(CIPEncapsulationPacketChildSerializeRequirement)
 
diff --git a/plc4go/protocols/abeth/readwrite/model/DF1RequestCommand.go b/plc4go/protocols/abeth/readwrite/model/DF1RequestCommand.go
index d2bbb0aeb..bcefbc53a 100644
--- a/plc4go/protocols/abeth/readwrite/model/DF1RequestCommand.go
+++ b/plc4go/protocols/abeth/readwrite/model/DF1RequestCommand.go
@@ -127,11 +127,10 @@ func DF1RequestCommandParse(readBuffer utils.ReadBuffer) (DF1RequestCommand, err
 	case functionCode == 0xA2: // DF1RequestProtectedTypedLogicalRead
 		_childTemp, typeSwitchError = DF1RequestProtectedTypedLogicalReadParse(readBuffer)
 	default:
-		// TODO: return actual type
-		typeSwitchError = errors.New("Unmapped type")
+		typeSwitchError = errors.Errorf("Unmapped type for parameters [functionCode=%v]", functionCode)
 	}
 	if typeSwitchError != nil {
-		return nil, errors.Wrap(typeSwitchError, "Error parsing sub-type for type-switch.")
+		return nil, errors.Wrap(typeSwitchError, "Error parsing sub-type for type-switch of DF1RequestCommand.")
 	}
 	_child = _childTemp.(DF1RequestCommandChildSerializeRequirement)
 
diff --git a/plc4go/protocols/abeth/readwrite/model/DF1RequestMessage.go b/plc4go/protocols/abeth/readwrite/model/DF1RequestMessage.go
index 452175792..a8dd032b8 100644
--- a/plc4go/protocols/abeth/readwrite/model/DF1RequestMessage.go
+++ b/plc4go/protocols/abeth/readwrite/model/DF1RequestMessage.go
@@ -223,11 +223,10 @@ func DF1RequestMessageParse(readBuffer utils.ReadBuffer) (DF1RequestMessage, err
 	case commandCode == 0x0F: // DF1CommandRequestMessage
 		_childTemp, typeSwitchError = DF1CommandRequestMessageParse(readBuffer)
 	default:
-		// TODO: return actual type
-		typeSwitchError = errors.New("Unmapped type")
+		typeSwitchError = errors.Errorf("Unmapped type for parameters [commandCode=%v]", commandCode)
 	}
 	if typeSwitchError != nil {
-		return nil, errors.Wrap(typeSwitchError, "Error parsing sub-type for type-switch.")
+		return nil, errors.Wrap(typeSwitchError, "Error parsing sub-type for type-switch of DF1RequestMessage.")
 	}
 	_child = _childTemp.(DF1RequestMessageChildSerializeRequirement)
 
diff --git a/plc4go/protocols/abeth/readwrite/model/DF1ResponseMessage.go b/plc4go/protocols/abeth/readwrite/model/DF1ResponseMessage.go
index 252998eed..128cc12e9 100644
--- a/plc4go/protocols/abeth/readwrite/model/DF1ResponseMessage.go
+++ b/plc4go/protocols/abeth/readwrite/model/DF1ResponseMessage.go
@@ -243,11 +243,10 @@ func DF1ResponseMessageParse(readBuffer utils.ReadBuffer, payloadLength uint16)
 	case commandCode == 0x4F: // DF1CommandResponseMessageProtectedTypedLogicalRead
 		_childTemp, typeSwitchError = DF1CommandResponseMessageProtectedTypedLogicalReadParse(readBuffer, payloadLength)
 	default:
-		// TODO: return actual type
-		typeSwitchError = errors.New("Unmapped type")
+		typeSwitchError = errors.Errorf("Unmapped type for parameters [commandCode=%v]", commandCode)
 	}
 	if typeSwitchError != nil {
-		return nil, errors.Wrap(typeSwitchError, "Error parsing sub-type for type-switch.")
+		return nil, errors.Wrap(typeSwitchError, "Error parsing sub-type for type-switch of DF1ResponseMessage.")
 	}
 	_child = _childTemp.(DF1ResponseMessageChildSerializeRequirement)
 
diff --git a/plc4go/protocols/ads/readwrite/model/AdsData.go b/plc4go/protocols/ads/readwrite/model/AdsData.go
index 01da0c498..7f83d2075 100644
--- a/plc4go/protocols/ads/readwrite/model/AdsData.go
+++ b/plc4go/protocols/ads/readwrite/model/AdsData.go
@@ -160,11 +160,10 @@ func AdsDataParse(readBuffer utils.ReadBuffer, commandId CommandId, response boo
 	case commandId == CommandId_ADS_READ_WRITE && response == bool(true): // AdsReadWriteResponse
 		_childTemp, typeSwitchError = AdsReadWriteResponseParse(readBuffer, commandId, response)
 	default:
-		// TODO: return actual type
-		typeSwitchError = errors.New("Unmapped type")
+		typeSwitchError = errors.Errorf("Unmapped type for parameters [commandId=%v, response=%v]", commandId, response)
 	}
 	if typeSwitchError != nil {
-		return nil, errors.Wrap(typeSwitchError, "Error parsing sub-type for type-switch.")
+		return nil, errors.Wrap(typeSwitchError, "Error parsing sub-type for type-switch of AdsData.")
 	}
 	_child = _childTemp.(AdsDataChildSerializeRequirement)
 
diff --git a/plc4go/protocols/ads/readwrite/model/AdsMultiRequestItem.go b/plc4go/protocols/ads/readwrite/model/AdsMultiRequestItem.go
index 7db094d1e..e7d5315d8 100644
--- a/plc4go/protocols/ads/readwrite/model/AdsMultiRequestItem.go
+++ b/plc4go/protocols/ads/readwrite/model/AdsMultiRequestItem.go
@@ -123,11 +123,10 @@ func AdsMultiRequestItemParse(readBuffer utils.ReadBuffer, indexGroup uint32) (A
 	case indexGroup == uint32(61570): // AdsMultiRequestItemReadWrite
 		_childTemp, typeSwitchError = AdsMultiRequestItemReadWriteParse(readBuffer, indexGroup)
 	default:
-		// TODO: return actual type
-		typeSwitchError = errors.New("Unmapped type")
+		typeSwitchError = errors.Errorf("Unmapped type for parameters [indexGroup=%v]", indexGroup)
 	}
 	if typeSwitchError != nil {
-		return nil, errors.Wrap(typeSwitchError, "Error parsing sub-type for type-switch.")
+		return nil, errors.Wrap(typeSwitchError, "Error parsing sub-type for type-switch of AdsMultiRequestItem.")
 	}
 	_child = _childTemp.(AdsMultiRequestItemChildSerializeRequirement)
 
diff --git a/plc4go/protocols/bacnetip/readwrite/model/APDU.go b/plc4go/protocols/bacnetip/readwrite/model/APDU.go
index c85e726fa..0f8cb201d 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/APDU.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/APDU.go
@@ -153,11 +153,10 @@ func APDUParse(readBuffer utils.ReadBuffer, apduLength uint16) (APDU, error) {
 	case true: // APDUUnknown
 		_childTemp, typeSwitchError = APDUUnknownParse(readBuffer, apduLength)
 	default:
-		// TODO: return actual type
-		typeSwitchError = errors.New("Unmapped type")
+		typeSwitchError = errors.Errorf("Unmapped type for parameters [apduType=%v]", apduType)
 	}
 	if typeSwitchError != nil {
-		return nil, errors.Wrap(typeSwitchError, "Error parsing sub-type for type-switch.")
+		return nil, errors.Wrap(typeSwitchError, "Error parsing sub-type for type-switch of APDU.")
 	}
 	_child = _childTemp.(APDUChildSerializeRequirement)
 
diff --git a/plc4go/protocols/bacnetip/readwrite/model/BACnetApplicationTag.go b/plc4go/protocols/bacnetip/readwrite/model/BACnetApplicationTag.go
index 507f49598..faab30918 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/BACnetApplicationTag.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/BACnetApplicationTag.go
@@ -213,11 +213,10 @@ func BACnetApplicationTagParse(readBuffer utils.ReadBuffer) (BACnetApplicationTa
 	case actualTagNumber == 0xC: // BACnetApplicationTagObjectIdentifier
 		_childTemp, typeSwitchError = BACnetApplicationTagObjectIdentifierParse(readBuffer)
 	default:
-		// TODO: return actual type
-		typeSwitchError = errors.New("Unmapped type")
+		typeSwitchError = errors.Errorf("Unmapped type for parameters [actualTagNumber=%v]", actualTagNumber)
 	}
 	if typeSwitchError != nil {
-		return nil, errors.Wrap(typeSwitchError, "Error parsing sub-type for type-switch.")
+		return nil, errors.Wrap(typeSwitchError, "Error parsing sub-type for type-switch of BACnetApplicationTag.")
 	}
 	_child = _childTemp.(BACnetApplicationTagChildSerializeRequirement)
 
diff --git a/plc4go/protocols/bacnetip/readwrite/model/BACnetCalendarEntry.go b/plc4go/protocols/bacnetip/readwrite/model/BACnetCalendarEntry.go
index 3e4d22973..16e788d81 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/BACnetCalendarEntry.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/BACnetCalendarEntry.go
@@ -172,11 +172,10 @@ func BACnetCalendarEntryParse(readBuffer utils.ReadBuffer) (BACnetCalendarEntry,
 	case peekedTagNumber == uint8(2): // BACnetCalendarEntryWeekNDay
 		_childTemp, typeSwitchError = BACnetCalendarEntryWeekNDayParse(readBuffer)
 	default:
-		// TODO: return actual type
-		typeSwitchError = errors.New("Unmapped type")
+		typeSwitchError = errors.Errorf("Unmapped type for parameters [peekedTagNumber=%v]", peekedTagNumber)
 	}
 	if typeSwitchError != nil {
-		return nil, errors.Wrap(typeSwitchError, "Error parsing sub-type for type-switch.")
+		return nil, errors.Wrap(typeSwitchError, "Error parsing sub-type for type-switch of BACnetCalendarEntry.")
 	}
 	_child = _childTemp.(BACnetCalendarEntryChildSerializeRequirement)
 
diff --git a/plc4go/protocols/bacnetip/readwrite/model/BACnetChannelValue.go b/plc4go/protocols/bacnetip/readwrite/model/BACnetChannelValue.go
index 9d1fa6920..2e1252bb9 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/BACnetChannelValue.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/BACnetChannelValue.go
@@ -207,11 +207,10 @@ func BACnetChannelValueParse(readBuffer utils.ReadBuffer) (BACnetChannelValue, e
 	case peekedTagNumber == uint8(0) && peekedIsContextTag == bool(true): // BACnetChannelValueLightingCommand
 		_childTemp, typeSwitchError = BACnetChannelValueLightingCommandParse(readBuffer)
 	default:
-		// TODO: return actual type
-		typeSwitchError = errors.New("Unmapped type")
+		typeSwitchError = errors.Errorf("Unmapped type for parameters [peekedTagNumber=%v, peekedIsContextTag=%v]", peekedTagNumber, peekedIsContextTag)
 	}
 	if typeSwitchError != nil {
-		return nil, errors.Wrap(typeSwitchError, "Error parsing sub-type for type-switch.")
+		return nil, errors.Wrap(typeSwitchError, "Error parsing sub-type for type-switch of BACnetChannelValue.")
 	}
 	_child = _childTemp.(BACnetChannelValueChildSerializeRequirement)
 
diff --git a/plc4go/protocols/bacnetip/readwrite/model/BACnetClientCOV.go b/plc4go/protocols/bacnetip/readwrite/model/BACnetClientCOV.go
index 22ef33593..6b1304016 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/BACnetClientCOV.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/BACnetClientCOV.go
@@ -165,11 +165,10 @@ func BACnetClientCOVParse(readBuffer utils.ReadBuffer) (BACnetClientCOV, error)
 	case peekedTagNumber == 0x0: // BACnetClientCOVNone
 		_childTemp, typeSwitchError = BACnetClientCOVNoneParse(readBuffer)
 	default:
-		// TODO: return actual type
-		typeSwitchError = errors.New("Unmapped type")
+		typeSwitchError = errors.Errorf("Unmapped type for parameters [peekedTagNumber=%v]", peekedTagNumber)
 	}
 	if typeSwitchError != nil {
-		return nil, errors.Wrap(typeSwitchError, "Error parsing sub-type for type-switch.")
+		return nil, errors.Wrap(typeSwitchError, "Error parsing sub-type for type-switch of BACnetClientCOV.")
 	}
 	_child = _childTemp.(BACnetClientCOVChildSerializeRequirement)
 
diff --git a/plc4go/protocols/bacnetip/readwrite/model/BACnetConfirmedServiceRequest.go b/plc4go/protocols/bacnetip/readwrite/model/BACnetConfirmedServiceRequest.go
index f7fa99fc3..9f5f0bbc7 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/BACnetConfirmedServiceRequest.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/BACnetConfirmedServiceRequest.go
@@ -222,11 +222,10 @@ func BACnetConfirmedServiceRequestParse(readBuffer utils.ReadBuffer, serviceRequ
 	case true: // BACnetConfirmedServiceRequestUnknown
 		_childTemp, typeSwitchError = BACnetConfirmedServiceRequestUnknownParse(readBuffer, serviceRequestLength, serviceRequestPayloadLength)
 	default:
-		// TODO: return actual type
-		typeSwitchError = errors.New("Unmapped type")
+		typeSwitchError = errors.Errorf("Unmapped type for parameters [serviceChoice=%v]", serviceChoice)
 	}
 	if typeSwitchError != nil {
-		return nil, errors.Wrap(typeSwitchError, "Error parsing sub-type for type-switch.")
+		return nil, errors.Wrap(typeSwitchError, "Error parsing sub-type for type-switch of BACnetConfirmedServiceRequest.")
 	}
 	_child = _childTemp.(BACnetConfirmedServiceRequestChildSerializeRequirement)
 
diff --git a/plc4go/protocols/bacnetip/readwrite/model/BACnetConfirmedServiceRequestAtomicReadFileStreamOrRecord.go b/plc4go/protocols/bacnetip/readwrite/model/BACnetConfirmedServiceRequestAtomicReadFileStreamOrRecord.go
index 52aecc684..14b43f7b0 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/BACnetConfirmedServiceRequestAtomicReadFileStreamOrRecord.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/BACnetConfirmedServiceRequestAtomicReadFileStreamOrRecord.go
@@ -198,11 +198,10 @@ func BACnetConfirmedServiceRequestAtomicReadFileStreamOrRecordParse(readBuffer u
 	case peekedTagNumber == 0x1: // BACnetConfirmedServiceRequestAtomicReadFileRecord
 		_childTemp, typeSwitchError = BACnetConfirmedServiceRequestAtomicReadFileRecordParse(readBuffer)
 	default:
-		// TODO: return actual type
-		typeSwitchError = errors.New("Unmapped type")
+		typeSwitchError = errors.Errorf("Unmapped type for parameters [peekedTagNumber=%v]", peekedTagNumber)
 	}
 	if typeSwitchError != nil {
-		return nil, errors.Wrap(typeSwitchError, "Error parsing sub-type for type-switch.")
+		return nil, errors.Wrap(typeSwitchError, "Error parsing sub-type for type-switch of BACnetConfirmedServiceRequestAtomicReadFileStreamOrRecord.")
 	}
 	_child = _childTemp.(BACnetConfirmedServiceRequestAtomicReadFileStreamOrRecordChildSerializeRequirement)
 
diff --git a/plc4go/protocols/bacnetip/readwrite/model/BACnetConfirmedServiceRequestConfirmedTextMessageMessageClass.go b/plc4go/protocols/bacnetip/readwrite/model/BACnetConfirmedServiceRequestConfirmedTextMessageMessageClass.go
index f20aa9028..a27c3ddd6 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/BACnetConfirmedServiceRequestConfirmedTextMessageMessageClass.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/BACnetConfirmedServiceRequestConfirmedTextMessageMessageClass.go
@@ -201,11 +201,10 @@ func BACnetConfirmedServiceRequestConfirmedTextMessageMessageClassParse(readBuff
 	case peekedTagNumber == uint8(1): // BACnetConfirmedServiceRequestConfirmedTextMessageMessageClassCharacter
 		_childTemp, typeSwitchError = BACnetConfirmedServiceRequestConfirmedTextMessageMessageClassCharacterParse(readBuffer, tagNumber)
 	default:
-		// TODO: return actual type
-		typeSwitchError = errors.New("Unmapped type")
+		typeSwitchError = errors.Errorf("Unmapped type for parameters [peekedTagNumber=%v]", peekedTagNumber)
 	}
 	if typeSwitchError != nil {
-		return nil, errors.Wrap(typeSwitchError, "Error parsing sub-type for type-switch.")
+		return nil, errors.Wrap(typeSwitchError, "Error parsing sub-type for type-switch of BACnetConfirmedServiceRequestConfirmedTextMessageMessageClass.")
 	}
 	_child = _childTemp.(BACnetConfirmedServiceRequestConfirmedTextMessageMessageClassChildSerializeRequirement)
 
diff --git a/plc4go/protocols/bacnetip/readwrite/model/BACnetConfirmedServiceRequestReadRangeRange.go b/plc4go/protocols/bacnetip/readwrite/model/BACnetConfirmedServiceRequestReadRangeRange.go
index e8234b1de..2c5f596d0 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/BACnetConfirmedServiceRequestReadRangeRange.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/BACnetConfirmedServiceRequestReadRangeRange.go
@@ -200,11 +200,10 @@ func BACnetConfirmedServiceRequestReadRangeRangeParse(readBuffer utils.ReadBuffe
 	case peekedTagNumber == 0x7: // BACnetConfirmedServiceRequestReadRangeRangeByTime
 		_childTemp, typeSwitchError = BACnetConfirmedServiceRequestReadRangeRangeByTimeParse(readBuffer)
 	default:
-		// TODO: return actual type
-		typeSwitchError = errors.New("Unmapped type")
+		typeSwitchError = errors.Errorf("Unmapped type for parameters [peekedTagNumber=%v]", peekedTagNumber)
 	}
 	if typeSwitchError != nil {
-		return nil, errors.Wrap(typeSwitchError, "Error parsing sub-type for type-switch.")
+		return nil, errors.Wrap(typeSwitchError, "Error parsing sub-type for type-switch of BACnetConfirmedServiceRequestReadRangeRange.")
 	}
 	_child = _childTemp.(BACnetConfirmedServiceRequestReadRangeRangeChildSerializeRequirement)
 
diff --git a/plc4go/protocols/bacnetip/readwrite/model/BACnetConstructedData.go b/plc4go/protocols/bacnetip/readwrite/model/BACnetConstructedData.go
index 7a930876d..e3d7a6dd6 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/BACnetConstructedData.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/BACnetConstructedData.go
@@ -1520,11 +1520,10 @@ func BACnetConstructedDataParse(readBuffer utils.ReadBuffer, tagNumber uint8, ob
 	case true: // BACnetConstructedDataUnspecified
 		_childTemp, typeSwitchError = BACnetConstructedDataUnspecifiedParse(readBuffer, tagNumber, objectTypeArgument, propertyIdentifierArgument, arrayIndexArgument)
 	default:
-		// TODO: return actual type
-		typeSwitchError = errors.New("Unmapped type")
+		typeSwitchError = errors.Errorf("Unmapped type for parameters [objectTypeArgument=%v, propertyIdentifierArgument=%v, peekedTagNumber=%v]", objectTypeArgument, propertyIdentifierArgument, peekedTagNumber)
 	}
 	if typeSwitchError != nil {
-		return nil, errors.Wrap(typeSwitchError, "Error parsing sub-type for type-switch.")
+		return nil, errors.Wrap(typeSwitchError, "Error parsing sub-type for type-switch of BACnetConstructedData.")
 	}
 	_child = _childTemp.(BACnetConstructedDataChildSerializeRequirement)
 
diff --git a/plc4go/protocols/bacnetip/readwrite/model/BACnetContextTag.go b/plc4go/protocols/bacnetip/readwrite/model/BACnetContextTag.go
index 1fdee8173..4ecac5836 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/BACnetContextTag.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/BACnetContextTag.go
@@ -231,11 +231,10 @@ func BACnetContextTagParse(readBuffer utils.ReadBuffer, tagNumberArgument uint8,
 	case dataType == BACnetDataType_UNKNOWN: // BACnetContextTagUnknown
 		_childTemp, typeSwitchError = BACnetContextTagUnknownParse(readBuffer, tagNumberArgument, dataType, actualLength)
 	default:
-		// TODO: return actual type
-		typeSwitchError = errors.New("Unmapped type")
+		typeSwitchError = errors.Errorf("Unmapped type for parameters [dataType=%v]", dataType)
 	}
 	if typeSwitchError != nil {
-		return nil, errors.Wrap(typeSwitchError, "Error parsing sub-type for type-switch.")
+		return nil, errors.Wrap(typeSwitchError, "Error parsing sub-type for type-switch of BACnetContextTag.")
 	}
 	_child = _childTemp.(BACnetContextTagChildSerializeRequirement)
 
diff --git a/plc4go/protocols/bacnetip/readwrite/model/BACnetError.go b/plc4go/protocols/bacnetip/readwrite/model/BACnetError.go
index 3c9563e40..550693830 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/BACnetError.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/BACnetError.go
@@ -133,11 +133,10 @@ func BACnetErrorParse(readBuffer utils.ReadBuffer, errorChoice BACnetConfirmedSe
 	case true: // BACnetErrorGeneral
 		_childTemp, typeSwitchError = BACnetErrorGeneralParse(readBuffer, errorChoice)
 	default:
-		// TODO: return actual type
-		typeSwitchError = errors.New("Unmapped type")
+		typeSwitchError = errors.Errorf("Unmapped type for parameters [errorChoice=%v]", errorChoice)
 	}
 	if typeSwitchError != nil {
-		return nil, errors.Wrap(typeSwitchError, "Error parsing sub-type for type-switch.")
+		return nil, errors.Wrap(typeSwitchError, "Error parsing sub-type for type-switch of BACnetError.")
 	}
 	_child = _childTemp.(BACnetErrorChildSerializeRequirement)
 
diff --git a/plc4go/protocols/bacnetip/readwrite/model/BACnetEventLogRecordLogDatum.go b/plc4go/protocols/bacnetip/readwrite/model/BACnetEventLogRecordLogDatum.go
index ab8453d96..3c0a335c8 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/BACnetEventLogRecordLogDatum.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/BACnetEventLogRecordLogDatum.go
@@ -203,11 +203,10 @@ func BACnetEventLogRecordLogDatumParse(readBuffer utils.ReadBuffer, tagNumber ui
 	case peekedTagNumber == uint8(2): // BACnetEventLogRecordLogDatumTimeChange
 		_childTemp, typeSwitchError = BACnetEventLogRecordLogDatumTimeChangeParse(readBuffer, tagNumber)
 	default:
-		// TODO: return actual type
-		typeSwitchError = errors.New("Unmapped type")
+		typeSwitchError = errors.Errorf("Unmapped type for parameters [peekedTagNumber=%v]", peekedTagNumber)
 	}
 	if typeSwitchError != nil {
-		return nil, errors.Wrap(typeSwitchError, "Error parsing sub-type for type-switch.")
+		return nil, errors.Wrap(typeSwitchError, "Error parsing sub-type for type-switch of BACnetEventLogRecordLogDatum.")
 	}
 	_child = _childTemp.(BACnetEventLogRecordLogDatumChildSerializeRequirement)
 
diff --git a/plc4go/protocols/bacnetip/readwrite/model/BACnetEventParameter.go b/plc4go/protocols/bacnetip/readwrite/model/BACnetEventParameter.go
index 7a0138b8a..5aff1f218 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/BACnetEventParameter.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/BACnetEventParameter.go
@@ -199,11 +199,10 @@ func BACnetEventParameterParse(readBuffer utils.ReadBuffer) (BACnetEventParamete
 	case peekedTagNumber == uint8(22): // BACnetEventParameterChangeOfTimer
 		_childTemp, typeSwitchError = BACnetEventParameterChangeOfTimerParse(readBuffer)
 	default:
-		// TODO: return actual type
-		typeSwitchError = errors.New("Unmapped type")
+		typeSwitchError = errors.Errorf("Unmapped type for parameters [peekedTagNumber=%v]", peekedTagNumber)
 	}
 	if typeSwitchError != nil {
-		return nil, errors.Wrap(typeSwitchError, "Error parsing sub-type for type-switch.")
+		return nil, errors.Wrap(typeSwitchError, "Error parsing sub-type for type-switch of BACnetEventParameter.")
 	}
 	_child = _childTemp.(BACnetEventParameterChildSerializeRequirement)
 
diff --git a/plc4go/protocols/bacnetip/readwrite/model/BACnetEventParameterChangeOfValueCivCriteria.go b/plc4go/protocols/bacnetip/readwrite/model/BACnetEventParameterChangeOfValueCivCriteria.go
index e45954959..18327f822 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/BACnetEventParameterChangeOfValueCivCriteria.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/BACnetEventParameterChangeOfValueCivCriteria.go
@@ -201,11 +201,10 @@ func BACnetEventParameterChangeOfValueCivCriteriaParse(readBuffer utils.ReadBuff
 	case peekedTagNumber == uint8(1): // BACnetEventParameterChangeOfValueCivCriteriaReferencedPropertyIncrement
 		_childTemp, typeSwitchError = BACnetEventParameterChangeOfValueCivCriteriaReferencedPropertyIncrementParse(readBuffer, tagNumber)
 	default:
-		// TODO: return actual type
-		typeSwitchError = errors.New("Unmapped type")
+		typeSwitchError = errors.Errorf("Unmapped type for parameters [peekedTagNumber=%v]", peekedTagNumber)
 	}
 	if typeSwitchError != nil {
-		return nil, errors.Wrap(typeSwitchError, "Error parsing sub-type for type-switch.")
+		return nil, errors.Wrap(typeSwitchError, "Error parsing sub-type for type-switch of BACnetEventParameterChangeOfValueCivCriteria.")
 	}
 	_child = _childTemp.(BACnetEventParameterChangeOfValueCivCriteriaChildSerializeRequirement)
 
diff --git a/plc4go/protocols/bacnetip/readwrite/model/BACnetFaultParameter.go b/plc4go/protocols/bacnetip/readwrite/model/BACnetFaultParameter.go
index 13279687e..e80663057 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/BACnetFaultParameter.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/BACnetFaultParameter.go
@@ -177,11 +177,10 @@ func BACnetFaultParameterParse(readBuffer utils.ReadBuffer) (BACnetFaultParamete
 	case peekedTagNumber == uint8(7): // BACnetFaultParameterFaultListed
 		_childTemp, typeSwitchError = BACnetFaultParameterFaultListedParse(readBuffer)
 	default:
-		// TODO: return actual type
-		typeSwitchError = errors.New("Unmapped type")
+		typeSwitchError = errors.Errorf("Unmapped type for parameters [peekedTagNumber=%v]", peekedTagNumber)
 	}
 	if typeSwitchError != nil {
-		return nil, errors.Wrap(typeSwitchError, "Error parsing sub-type for type-switch.")
+		return nil, errors.Wrap(typeSwitchError, "Error parsing sub-type for type-switch of BACnetFaultParameter.")
 	}
 	_child = _childTemp.(BACnetFaultParameterChildSerializeRequirement)
 
diff --git a/plc4go/protocols/bacnetip/readwrite/model/BACnetFaultParameterFaultExtendedParametersEntry.go b/plc4go/protocols/bacnetip/readwrite/model/BACnetFaultParameterFaultExtendedParametersEntry.go
index fbe9b7b4e..353763978 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/BACnetFaultParameterFaultExtendedParametersEntry.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/BACnetFaultParameterFaultExtendedParametersEntry.go
@@ -207,11 +207,10 @@ func BACnetFaultParameterFaultExtendedParametersEntryParse(readBuffer utils.Read
 	case peekedTagNumber == uint8(0) && peekedIsContextTag == bool(true): // BACnetFaultParameterFaultExtendedParametersEntryReference
 		_childTemp, typeSwitchError = BACnetFaultParameterFaultExtendedParametersEntryReferenceParse(readBuffer)
 	default:
-		// TODO: return actual type
-		typeSwitchError = errors.New("Unmapped type")
+		typeSwitchError = errors.Errorf("Unmapped type for parameters [peekedTagNumber=%v, peekedIsContextTag=%v]", peekedTagNumber, peekedIsContextTag)
 	}
 	if typeSwitchError != nil {
-		return nil, errors.Wrap(typeSwitchError, "Error parsing sub-type for type-switch.")
+		return nil, errors.Wrap(typeSwitchError, "Error parsing sub-type for type-switch of BACnetFaultParameterFaultExtendedParametersEntry.")
 	}
 	_child = _childTemp.(BACnetFaultParameterFaultExtendedParametersEntryChildSerializeRequirement)
 
diff --git a/plc4go/protocols/bacnetip/readwrite/model/BACnetFaultParameterFaultOutOfRangeMaxNormalValue.go b/plc4go/protocols/bacnetip/readwrite/model/BACnetFaultParameterFaultOutOfRangeMaxNormalValue.go
index 70c9de60e..524cf4aa7 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/BACnetFaultParameterFaultOutOfRangeMaxNormalValue.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/BACnetFaultParameterFaultOutOfRangeMaxNormalValue.go
@@ -210,11 +210,10 @@ func BACnetFaultParameterFaultOutOfRangeMaxNormalValueParse(readBuffer utils.Rea
 	case peekedTagNumber == 0x3: // BACnetFaultParameterFaultOutOfRangeMaxNormalValueInteger
 		_childTemp, typeSwitchError = BACnetFaultParameterFaultOutOfRangeMaxNormalValueIntegerParse(readBuffer, tagNumber)
 	default:
-		// TODO: return actual type
-		typeSwitchError = errors.New("Unmapped type")
+		typeSwitchError = errors.Errorf("Unmapped type for parameters [peekedTagNumber=%v]", peekedTagNumber)
 	}
 	if typeSwitchError != nil {
-		return nil, errors.Wrap(typeSwitchError, "Error parsing sub-type for type-switch.")
+		return nil, errors.Wrap(typeSwitchError, "Error parsing sub-type for type-switch of BACnetFaultParameterFaultOutOfRangeMaxNormalValue.")
 	}
 	_child = _childTemp.(BACnetFaultParameterFaultOutOfRangeMaxNormalValueChildSerializeRequirement)
 
diff --git a/plc4go/protocols/bacnetip/readwrite/model/BACnetFaultParameterFaultOutOfRangeMinNormalValue.go b/plc4go/protocols/bacnetip/readwrite/model/BACnetFaultParameterFaultOutOfRangeMinNormalValue.go
index 75f4fe103..886658ffa 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/BACnetFaultParameterFaultOutOfRangeMinNormalValue.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/BACnetFaultParameterFaultOutOfRangeMinNormalValue.go
@@ -210,11 +210,10 @@ func BACnetFaultParameterFaultOutOfRangeMinNormalValueParse(readBuffer utils.Rea
 	case peekedTagNumber == 0x3: // BACnetFaultParameterFaultOutOfRangeMinNormalValueInteger
 		_childTemp, typeSwitchError = BACnetFaultParameterFaultOutOfRangeMinNormalValueIntegerParse(readBuffer, tagNumber)
 	default:
-		// TODO: return actual type
-		typeSwitchError = errors.New("Unmapped type")
+		typeSwitchError = errors.Errorf("Unmapped type for parameters [peekedTagNumber=%v]", peekedTagNumber)
 	}
 	if typeSwitchError != nil {
-		return nil, errors.Wrap(typeSwitchError, "Error parsing sub-type for type-switch.")
+		return nil, errors.Wrap(typeSwitchError, "Error parsing sub-type for type-switch of BACnetFaultParameterFaultOutOfRangeMinNormalValue.")
 	}
 	_child = _childTemp.(BACnetFaultParameterFaultOutOfRangeMinNormalValueChildSerializeRequirement)
 
diff --git a/plc4go/protocols/bacnetip/readwrite/model/BACnetHostAddress.go b/plc4go/protocols/bacnetip/readwrite/model/BACnetHostAddress.go
index 38632a999..565a9e375 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/BACnetHostAddress.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/BACnetHostAddress.go
@@ -167,11 +167,10 @@ func BACnetHostAddressParse(readBuffer utils.ReadBuffer) (BACnetHostAddress, err
 	case peekedTagNumber == uint8(2): // BACnetHostAddressName
 		_childTemp, typeSwitchError = BACnetHostAddressNameParse(readBuffer)
 	default:
-		// TODO: return actual type
-		typeSwitchError = errors.New("Unmapped type")
+		typeSwitchError = errors.Errorf("Unmapped type for parameters [peekedTagNumber=%v]", peekedTagNumber)
 	}
 	if typeSwitchError != nil {
-		return nil, errors.Wrap(typeSwitchError, "Error parsing sub-type for type-switch.")
+		return nil, errors.Wrap(typeSwitchError, "Error parsing sub-type for type-switch of BACnetHostAddress.")
 	}
 	_child = _childTemp.(BACnetHostAddressChildSerializeRequirement)
 
diff --git a/plc4go/protocols/bacnetip/readwrite/model/BACnetLandingCallStatusCommand.go b/plc4go/protocols/bacnetip/readwrite/model/BACnetLandingCallStatusCommand.go
index 851f80f2f..e23be59d6 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/BACnetLandingCallStatusCommand.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/BACnetLandingCallStatusCommand.go
@@ -165,11 +165,10 @@ func BACnetLandingCallStatusCommandParse(readBuffer utils.ReadBuffer) (BACnetLan
 	case peekedTagNumber == uint8(2): // BACnetLandingCallStatusCommandDestination
 		_childTemp, typeSwitchError = BACnetLandingCallStatusCommandDestinationParse(readBuffer)
 	default:
-		// TODO: return actual type
-		typeSwitchError = errors.New("Unmapped type")
+		typeSwitchError = errors.Errorf("Unmapped type for parameters [peekedTagNumber=%v]", peekedTagNumber)
 	}
 	if typeSwitchError != nil {
-		return nil, errors.Wrap(typeSwitchError, "Error parsing sub-type for type-switch.")
+		return nil, errors.Wrap(typeSwitchError, "Error parsing sub-type for type-switch of BACnetLandingCallStatusCommand.")
 	}
 	_child = _childTemp.(BACnetLandingCallStatusCommandChildSerializeRequirement)
 
diff --git a/plc4go/protocols/bacnetip/readwrite/model/BACnetLogData.go b/plc4go/protocols/bacnetip/readwrite/model/BACnetLogData.go
index 6cfc4dc10..20cdb90d0 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/BACnetLogData.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/BACnetLogData.go
@@ -203,11 +203,10 @@ func BACnetLogDataParse(readBuffer utils.ReadBuffer, tagNumber uint8) (BACnetLog
 	case peekedTagNumber == uint8(2): // BACnetLogDataLogDataTimeChange
 		_childTemp, typeSwitchError = BACnetLogDataLogDataTimeChangeParse(readBuffer, tagNumber)
 	default:
-		// TODO: return actual type
-		typeSwitchError = errors.New("Unmapped type")
+		typeSwitchError = errors.Errorf("Unmapped type for parameters [peekedTagNumber=%v]", peekedTagNumber)
 	}
 	if typeSwitchError != nil {
-		return nil, errors.Wrap(typeSwitchError, "Error parsing sub-type for type-switch.")
+		return nil, errors.Wrap(typeSwitchError, "Error parsing sub-type for type-switch of BACnetLogData.")
 	}
 	_child = _childTemp.(BACnetLogDataChildSerializeRequirement)
 
diff --git a/plc4go/protocols/bacnetip/readwrite/model/BACnetLogDataLogDataEntry.go b/plc4go/protocols/bacnetip/readwrite/model/BACnetLogDataLogDataEntry.go
index a55ce9e28..fa07d80a5 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/BACnetLogDataLogDataEntry.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/BACnetLogDataLogDataEntry.go
@@ -179,11 +179,10 @@ func BACnetLogDataLogDataEntryParse(readBuffer utils.ReadBuffer) (BACnetLogDataL
 	case peekedTagNumber == uint8(8): // BACnetLogDataLogDataEntryAnyValue
 		_childTemp, typeSwitchError = BACnetLogDataLogDataEntryAnyValueParse(readBuffer)
 	default:
-		// TODO: return actual type
-		typeSwitchError = errors.New("Unmapped type")
+		typeSwitchError = errors.Errorf("Unmapped type for parameters [peekedTagNumber=%v]", peekedTagNumber)
 	}
 	if typeSwitchError != nil {
-		return nil, errors.Wrap(typeSwitchError, "Error parsing sub-type for type-switch.")
+		return nil, errors.Wrap(typeSwitchError, "Error parsing sub-type for type-switch of BACnetLogDataLogDataEntry.")
 	}
 	_child = _childTemp.(BACnetLogDataLogDataEntryChildSerializeRequirement)
 
diff --git a/plc4go/protocols/bacnetip/readwrite/model/BACnetLogRecordLogDatum.go b/plc4go/protocols/bacnetip/readwrite/model/BACnetLogRecordLogDatum.go
index 030fcee1d..d72ecefde 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/BACnetLogRecordLogDatum.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/BACnetLogRecordLogDatum.go
@@ -219,11 +219,10 @@ func BACnetLogRecordLogDatumParse(readBuffer utils.ReadBuffer, tagNumber uint8)
 	case peekedTagNumber == uint8(10): // BACnetLogRecordLogDatumAnyValue
 		_childTemp, typeSwitchError = BACnetLogRecordLogDatumAnyValueParse(readBuffer, tagNumber)
 	default:
-		// TODO: return actual type
-		typeSwitchError = errors.New("Unmapped type")
+		typeSwitchError = errors.Errorf("Unmapped type for parameters [peekedTagNumber=%v]", peekedTagNumber)
 	}
 	if typeSwitchError != nil {
-		return nil, errors.Wrap(typeSwitchError, "Error parsing sub-type for type-switch.")
+		return nil, errors.Wrap(typeSwitchError, "Error parsing sub-type for type-switch of BACnetLogRecordLogDatum.")
 	}
 	_child = _childTemp.(BACnetLogRecordLogDatumChildSerializeRequirement)
 
diff --git a/plc4go/protocols/bacnetip/readwrite/model/BACnetNotificationParameters.go b/plc4go/protocols/bacnetip/readwrite/model/BACnetNotificationParameters.go
index 3e51812c8..0cc974f03 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/BACnetNotificationParameters.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/BACnetNotificationParameters.go
@@ -238,11 +238,10 @@ func BACnetNotificationParametersParse(readBuffer utils.ReadBuffer, tagNumber ui
 	case peekedTagNumber == uint8(22): // BACnetNotificationParametersChangeOfTimer
 		_childTemp, typeSwitchError = BACnetNotificationParametersChangeOfTimerParse(readBuffer, tagNumber, objectTypeArgument, peekedTagNumber)
 	default:
-		// TODO: return actual type
-		typeSwitchError = errors.New("Unmapped type")
+		typeSwitchError = errors.Errorf("Unmapped type for parameters [peekedTagNumber=%v]", peekedTagNumber)
 	}
 	if typeSwitchError != nil {
-		return nil, errors.Wrap(typeSwitchError, "Error parsing sub-type for type-switch.")
+		return nil, errors.Wrap(typeSwitchError, "Error parsing sub-type for type-switch of BACnetNotificationParameters.")
 	}
 	_child = _childTemp.(BACnetNotificationParametersChildSerializeRequirement)
 
diff --git a/plc4go/protocols/bacnetip/readwrite/model/BACnetNotificationParametersChangeOfDiscreteValueNewValue.go b/plc4go/protocols/bacnetip/readwrite/model/BACnetNotificationParametersChangeOfDiscreteValueNewValue.go
index 1ca217fb5..2832c9624 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/BACnetNotificationParametersChangeOfDiscreteValueNewValue.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/BACnetNotificationParametersChangeOfDiscreteValueNewValue.go
@@ -235,11 +235,10 @@ func BACnetNotificationParametersChangeOfDiscreteValueNewValueParse(readBuffer u
 	case peekedTagNumber == uint8(0) && peekedIsContextTag == bool(true): // BACnetNotificationParametersChangeOfDiscreteValueNewValueDatetime
 		_childTemp, typeSwitchError = BACnetNotificationParametersChangeOfDiscreteValueNewValueDatetimeParse(readBuffer, tagNumber)
 	default:
-		// TODO: return actual type
-		typeSwitchError = errors.New("Unmapped type")
+		typeSwitchError = errors.Errorf("Unmapped type for parameters [peekedTagNumber=%v, peekedIsContextTag=%v]", peekedTagNumber, peekedIsContextTag)
 	}
 	if typeSwitchError != nil {
-		return nil, errors.Wrap(typeSwitchError, "Error parsing sub-type for type-switch.")
+		return nil, errors.Wrap(typeSwitchError, "Error parsing sub-type for type-switch of BACnetNotificationParametersChangeOfDiscreteValueNewValue.")
 	}
 	_child = _childTemp.(BACnetNotificationParametersChangeOfDiscreteValueNewValueChildSerializeRequirement)
 
diff --git a/plc4go/protocols/bacnetip/readwrite/model/BACnetNotificationParametersChangeOfValueNewValue.go b/plc4go/protocols/bacnetip/readwrite/model/BACnetNotificationParametersChangeOfValueNewValue.go
index 5bfacc724..fad33293a 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/BACnetNotificationParametersChangeOfValueNewValue.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/BACnetNotificationParametersChangeOfValueNewValue.go
@@ -201,11 +201,10 @@ func BACnetNotificationParametersChangeOfValueNewValueParse(readBuffer utils.Rea
 	case peekedTagNumber == uint8(1): // BACnetNotificationParametersChangeOfValueNewValueChangedValue
 		_childTemp, typeSwitchError = BACnetNotificationParametersChangeOfValueNewValueChangedValueParse(readBuffer, tagNumber, peekedTagNumber)
 	default:
-		// TODO: return actual type
-		typeSwitchError = errors.New("Unmapped type")
+		typeSwitchError = errors.Errorf("Unmapped type for parameters [peekedTagNumber=%v]", peekedTagNumber)
 	}
 	if typeSwitchError != nil {
-		return nil, errors.Wrap(typeSwitchError, "Error parsing sub-type for type-switch.")
+		return nil, errors.Wrap(typeSwitchError, "Error parsing sub-type for type-switch of BACnetNotificationParametersChangeOfValueNewValue.")
 	}
 	_child = _childTemp.(BACnetNotificationParametersChangeOfValueNewValueChildSerializeRequirement)
 
diff --git a/plc4go/protocols/bacnetip/readwrite/model/BACnetOptionalBinaryPV.go b/plc4go/protocols/bacnetip/readwrite/model/BACnetOptionalBinaryPV.go
index 70b625d8e..53a5f1913 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/BACnetOptionalBinaryPV.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/BACnetOptionalBinaryPV.go
@@ -165,11 +165,10 @@ func BACnetOptionalBinaryPVParse(readBuffer utils.ReadBuffer) (BACnetOptionalBin
 	case true: // BACnetOptionalBinaryPVValue
 		_childTemp, typeSwitchError = BACnetOptionalBinaryPVValueParse(readBuffer)
 	default:
-		// TODO: return actual type
-		typeSwitchError = errors.New("Unmapped type")
+		typeSwitchError = errors.Errorf("Unmapped type for parameters [peekedTagNumber=%v]", peekedTagNumber)
 	}
 	if typeSwitchError != nil {
-		return nil, errors.Wrap(typeSwitchError, "Error parsing sub-type for type-switch.")
+		return nil, errors.Wrap(typeSwitchError, "Error parsing sub-type for type-switch of BACnetOptionalBinaryPV.")
 	}
 	_child = _childTemp.(BACnetOptionalBinaryPVChildSerializeRequirement)
 
diff --git a/plc4go/protocols/bacnetip/readwrite/model/BACnetOptionalCharacterString.go b/plc4go/protocols/bacnetip/readwrite/model/BACnetOptionalCharacterString.go
index 529d9fd43..c2ee5d4c7 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/BACnetOptionalCharacterString.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/BACnetOptionalCharacterString.go
@@ -165,11 +165,10 @@ func BACnetOptionalCharacterStringParse(readBuffer utils.ReadBuffer) (BACnetOpti
 	case true: // BACnetOptionalCharacterStringValue
 		_childTemp, typeSwitchError = BACnetOptionalCharacterStringValueParse(readBuffer)
 	default:
-		// TODO: return actual type
-		typeSwitchError = errors.New("Unmapped type")
+		typeSwitchError = errors.Errorf("Unmapped type for parameters [peekedTagNumber=%v]", peekedTagNumber)
 	}
 	if typeSwitchError != nil {
-		return nil, errors.Wrap(typeSwitchError, "Error parsing sub-type for type-switch.")
+		return nil, errors.Wrap(typeSwitchError, "Error parsing sub-type for type-switch of BACnetOptionalCharacterString.")
 	}
 	_child = _childTemp.(BACnetOptionalCharacterStringChildSerializeRequirement)
 
diff --git a/plc4go/protocols/bacnetip/readwrite/model/BACnetOptionalREAL.go b/plc4go/protocols/bacnetip/readwrite/model/BACnetOptionalREAL.go
index 0d89a91eb..47e42c37c 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/BACnetOptionalREAL.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/BACnetOptionalREAL.go
@@ -165,11 +165,10 @@ func BACnetOptionalREALParse(readBuffer utils.ReadBuffer) (BACnetOptionalREAL, e
 	case true: // BACnetOptionalREALValue
 		_childTemp, typeSwitchError = BACnetOptionalREALValueParse(readBuffer)
 	default:
-		// TODO: return actual type
-		typeSwitchError = errors.New("Unmapped type")
+		typeSwitchError = errors.Errorf("Unmapped type for parameters [peekedTagNumber=%v]", peekedTagNumber)
 	}
 	if typeSwitchError != nil {
-		return nil, errors.Wrap(typeSwitchError, "Error parsing sub-type for type-switch.")
+		return nil, errors.Wrap(typeSwitchError, "Error parsing sub-type for type-switch of BACnetOptionalREAL.")
 	}
 	_child = _childTemp.(BACnetOptionalREALChildSerializeRequirement)
 
diff --git a/plc4go/protocols/bacnetip/readwrite/model/BACnetOptionalUnsigned.go b/plc4go/protocols/bacnetip/readwrite/model/BACnetOptionalUnsigned.go
index 38ed90377..abb558b5d 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/BACnetOptionalUnsigned.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/BACnetOptionalUnsigned.go
@@ -165,11 +165,10 @@ func BACnetOptionalUnsignedParse(readBuffer utils.ReadBuffer) (BACnetOptionalUns
 	case true: // BACnetOptionalUnsignedValue
 		_childTemp, typeSwitchError = BACnetOptionalUnsignedValueParse(readBuffer)
 	default:
-		// TODO: return actual type
-		typeSwitchError = errors.New("Unmapped type")
+		typeSwitchError = errors.Errorf("Unmapped type for parameters [peekedTagNumber=%v]", peekedTagNumber)
 	}
 	if typeSwitchError != nil {
-		return nil, errors.Wrap(typeSwitchError, "Error parsing sub-type for type-switch.")
+		return nil, errors.Wrap(typeSwitchError, "Error parsing sub-type for type-switch of BACnetOptionalUnsigned.")
 	}
 	_child = _childTemp.(BACnetOptionalUnsignedChildSerializeRequirement)
 
diff --git a/plc4go/protocols/bacnetip/readwrite/model/BACnetPriorityValue.go b/plc4go/protocols/bacnetip/readwrite/model/BACnetPriorityValue.go
index 833601e88..15d895c35 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/BACnetPriorityValue.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/BACnetPriorityValue.go
@@ -212,11 +212,10 @@ func BACnetPriorityValueParse(readBuffer utils.ReadBuffer, objectTypeArgument BA
 	case peekedTagNumber == uint8(1) && peekedIsContextTag == bool(true): // BACnetPriorityValueDateTime
 		_childTemp, typeSwitchError = BACnetPriorityValueDateTimeParse(readBuffer, objectTypeArgument)
 	default:
-		// TODO: return actual type
-		typeSwitchError = errors.New("Unmapped type")
+		typeSwitchError = errors.Errorf("Unmapped type for parameters [peekedTagNumber=%v, peekedIsContextTag=%v]", peekedTagNumber, peekedIsContextTag)
 	}
 	if typeSwitchError != nil {
-		return nil, errors.Wrap(typeSwitchError, "Error parsing sub-type for type-switch.")
+		return nil, errors.Wrap(typeSwitchError, "Error parsing sub-type for type-switch of BACnetPriorityValue.")
 	}
 	_child = _childTemp.(BACnetPriorityValueChildSerializeRequirement)
 
diff --git a/plc4go/protocols/bacnetip/readwrite/model/BACnetProcessIdSelection.go b/plc4go/protocols/bacnetip/readwrite/model/BACnetProcessIdSelection.go
index 8a7001ff7..95c4a9e05 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/BACnetProcessIdSelection.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/BACnetProcessIdSelection.go
@@ -165,11 +165,10 @@ func BACnetProcessIdSelectionParse(readBuffer utils.ReadBuffer) (BACnetProcessId
 	case true: // BACnetProcessIdSelectionValue
 		_childTemp, typeSwitchError = BACnetProcessIdSelectionValueParse(readBuffer)
 	default:
-		// TODO: return actual type
-		typeSwitchError = errors.New("Unmapped type")
+		typeSwitchError = errors.Errorf("Unmapped type for parameters [peekedTagNumber=%v]", peekedTagNumber)
 	}
 	if typeSwitchError != nil {
-		return nil, errors.Wrap(typeSwitchError, "Error parsing sub-type for type-switch.")
+		return nil, errors.Wrap(typeSwitchError, "Error parsing sub-type for type-switch of BACnetProcessIdSelection.")
 	}
 	_child = _childTemp.(BACnetProcessIdSelectionChildSerializeRequirement)
 
diff --git a/plc4go/protocols/bacnetip/readwrite/model/BACnetPropertyAccessResultAccessResult.go b/plc4go/protocols/bacnetip/readwrite/model/BACnetPropertyAccessResultAccessResult.go
index 61b4812e8..494ad1b31 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/BACnetPropertyAccessResultAccessResult.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/BACnetPropertyAccessResultAccessResult.go
@@ -170,11 +170,10 @@ func BACnetPropertyAccessResultAccessResultParse(readBuffer utils.ReadBuffer, ob
 	case peekedTagNumber == uint8(5): // BACnetPropertyAccessResultAccessResultPropertyAccessError
 		_childTemp, typeSwitchError = BACnetPropertyAccessResultAccessResultPropertyAccessErrorParse(readBuffer, objectTypeArgument, propertyIdentifierArgument, propertyArrayIndexArgument)
 	default:
-		// TODO: return actual type
-		typeSwitchError = errors.New("Unmapped type")
+		typeSwitchError = errors.Errorf("Unmapped type for parameters [peekedTagNumber=%v]", peekedTagNumber)
 	}
 	if typeSwitchError != nil {
-		return nil, errors.Wrap(typeSwitchError, "Error parsing sub-type for type-switch.")
+		return nil, errors.Wrap(typeSwitchError, "Error parsing sub-type for type-switch of BACnetPropertyAccessResultAccessResult.")
 	}
 	_child = _childTemp.(BACnetPropertyAccessResultAccessResultChildSerializeRequirement)
 
diff --git a/plc4go/protocols/bacnetip/readwrite/model/BACnetPropertyStates.go b/plc4go/protocols/bacnetip/readwrite/model/BACnetPropertyStates.go
index e38c3710c..d48c07e3f 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/BACnetPropertyStates.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/BACnetPropertyStates.go
@@ -279,11 +279,10 @@ func BACnetPropertyStatesParse(readBuffer utils.ReadBuffer) (BACnetPropertyState
 	case true: // BACnetPropertyStateActionUnknown
 		_childTemp, typeSwitchError = BACnetPropertyStateActionUnknownParse(readBuffer, peekedTagNumber)
 	default:
-		// TODO: return actual type
-		typeSwitchError = errors.New("Unmapped type")
+		typeSwitchError = errors.Errorf("Unmapped type for parameters [peekedTagNumber=%v]", peekedTagNumber)
 	}
 	if typeSwitchError != nil {
-		return nil, errors.Wrap(typeSwitchError, "Error parsing sub-type for type-switch.")
+		return nil, errors.Wrap(typeSwitchError, "Error parsing sub-type for type-switch of BACnetPropertyStates.")
 	}
 	_child = _childTemp.(BACnetPropertyStatesChildSerializeRequirement)
 
diff --git a/plc4go/protocols/bacnetip/readwrite/model/BACnetRecipient.go b/plc4go/protocols/bacnetip/readwrite/model/BACnetRecipient.go
index f855f36d4..84c6811f4 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/BACnetRecipient.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/BACnetRecipient.go
@@ -165,11 +165,10 @@ func BACnetRecipientParse(readBuffer utils.ReadBuffer) (BACnetRecipient, error)
 	case peekedTagNumber == uint8(1): // BACnetRecipientAddress
 		_childTemp, typeSwitchError = BACnetRecipientAddressParse(readBuffer)
 	default:
-		// TODO: return actual type
-		typeSwitchError = errors.New("Unmapped type")
+		typeSwitchError = errors.Errorf("Unmapped type for parameters [peekedTagNumber=%v]", peekedTagNumber)
 	}
 	if typeSwitchError != nil {
-		return nil, errors.Wrap(typeSwitchError, "Error parsing sub-type for type-switch.")
+		return nil, errors.Wrap(typeSwitchError, "Error parsing sub-type for type-switch of BACnetRecipient.")
 	}
 	_child = _childTemp.(BACnetRecipientChildSerializeRequirement)
 
diff --git a/plc4go/protocols/bacnetip/readwrite/model/BACnetScale.go b/plc4go/protocols/bacnetip/readwrite/model/BACnetScale.go
index 28ebad55e..6e3d1b254 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/BACnetScale.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/BACnetScale.go
@@ -165,11 +165,10 @@ func BACnetScaleParse(readBuffer utils.ReadBuffer) (BACnetScale, error) {
 	case peekedTagNumber == uint8(1): // BACnetScaleIntegerScale
 		_childTemp, typeSwitchError = BACnetScaleIntegerScaleParse(readBuffer)
 	default:
-		// TODO: return actual type
-		typeSwitchError = errors.New("Unmapped type")
+		typeSwitchError = errors.Errorf("Unmapped type for parameters [peekedTagNumber=%v]", peekedTagNumber)
 	}
 	if typeSwitchError != nil {
-		return nil, errors.Wrap(typeSwitchError, "Error parsing sub-type for type-switch.")
+		return nil, errors.Wrap(typeSwitchError, "Error parsing sub-type for type-switch of BACnetScale.")
 	}
 	_child = _childTemp.(BACnetScaleChildSerializeRequirement)
 
diff --git a/plc4go/protocols/bacnetip/readwrite/model/BACnetServiceAck.go b/plc4go/protocols/bacnetip/readwrite/model/BACnetServiceAck.go
index 2a43b4d9a..8fee3d633 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/BACnetServiceAck.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/BACnetServiceAck.go
@@ -188,11 +188,10 @@ func BACnetServiceAckParse(readBuffer utils.ReadBuffer, serviceAckLength uint16)
 	case serviceChoice == BACnetConfirmedServiceChoice_READ_PROPERTY_CONDITIONAL: // BACnetServiceAckReadPropertyConditional
 		_childTemp, typeSwitchError = BACnetServiceAckReadPropertyConditionalParse(readBuffer, serviceAckLength, serviceAckPayloadLength)
 	default:
-		// TODO: return actual type
-		typeSwitchError = errors.New("Unmapped type")
+		typeSwitchError = errors.Errorf("Unmapped type for parameters [serviceChoice=%v]", serviceChoice)
 	}
 	if typeSwitchError != nil {
-		return nil, errors.Wrap(typeSwitchError, "Error parsing sub-type for type-switch.")
+		return nil, errors.Wrap(typeSwitchError, "Error parsing sub-type for type-switch of BACnetServiceAck.")
 	}
 	_child = _childTemp.(BACnetServiceAckChildSerializeRequirement)
 
diff --git a/plc4go/protocols/bacnetip/readwrite/model/BACnetServiceAckAtomicReadFileStreamOrRecord.go b/plc4go/protocols/bacnetip/readwrite/model/BACnetServiceAckAtomicReadFileStreamOrRecord.go
index 1d86612f8..39de99599 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/BACnetServiceAckAtomicReadFileStreamOrRecord.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/BACnetServiceAckAtomicReadFileStreamOrRecord.go
@@ -198,11 +198,10 @@ func BACnetServiceAckAtomicReadFileStreamOrRecordParse(readBuffer utils.ReadBuff
 	case peekedTagNumber == 0x1: // BACnetServiceAckAtomicReadFileRecord
 		_childTemp, typeSwitchError = BACnetServiceAckAtomicReadFileRecordParse(readBuffer)
 	default:
-		// TODO: return actual type
-		typeSwitchError = errors.New("Unmapped type")
+		typeSwitchError = errors.Errorf("Unmapped type for parameters [peekedTagNumber=%v]", peekedTagNumber)
 	}
 	if typeSwitchError != nil {
-		return nil, errors.Wrap(typeSwitchError, "Error parsing sub-type for type-switch.")
+		return nil, errors.Wrap(typeSwitchError, "Error parsing sub-type for type-switch of BACnetServiceAckAtomicReadFileStreamOrRecord.")
 	}
 	_child = _childTemp.(BACnetServiceAckAtomicReadFileStreamOrRecordChildSerializeRequirement)
 
diff --git a/plc4go/protocols/bacnetip/readwrite/model/BACnetShedLevel.go b/plc4go/protocols/bacnetip/readwrite/model/BACnetShedLevel.go
index d448d9fe6..f2705ccb5 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/BACnetShedLevel.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/BACnetShedLevel.go
@@ -167,11 +167,10 @@ func BACnetShedLevelParse(readBuffer utils.ReadBuffer) (BACnetShedLevel, error)
 	case peekedTagNumber == uint8(2): // BACnetShedLevelAmount
 		_childTemp, typeSwitchError = BACnetShedLevelAmountParse(readBuffer)
 	default:
-		// TODO: return actual type
-		typeSwitchError = errors.New("Unmapped type")
+		typeSwitchError = errors.Errorf("Unmapped type for parameters [peekedTagNumber=%v]", peekedTagNumber)
 	}
 	if typeSwitchError != nil {
-		return nil, errors.Wrap(typeSwitchError, "Error parsing sub-type for type-switch.")
+		return nil, errors.Wrap(typeSwitchError, "Error parsing sub-type for type-switch of BACnetShedLevel.")
 	}
 	_child = _childTemp.(BACnetShedLevelChildSerializeRequirement)
 
diff --git a/plc4go/protocols/bacnetip/readwrite/model/BACnetSpecialEventPeriod.go b/plc4go/protocols/bacnetip/readwrite/model/BACnetSpecialEventPeriod.go
index 6de637c27..699587ea5 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/BACnetSpecialEventPeriod.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/BACnetSpecialEventPeriod.go
@@ -170,11 +170,10 @@ func BACnetSpecialEventPeriodParse(readBuffer utils.ReadBuffer) (BACnetSpecialEv
 	case peekedTagNumber == uint8(1): // BACnetSpecialEventPeriodCalendarReference
 		_childTemp, typeSwitchError = BACnetSpecialEventPeriodCalendarReferenceParse(readBuffer)
 	default:
-		// TODO: return actual type
-		typeSwitchError = errors.New("Unmapped type")
+		typeSwitchError = errors.Errorf("Unmapped type for parameters [peekedTagNumber=%v]", peekedTagNumber)
 	}
 	if typeSwitchError != nil {
-		return nil, errors.Wrap(typeSwitchError, "Error parsing sub-type for type-switch.")
+		return nil, errors.Wrap(typeSwitchError, "Error parsing sub-type for type-switch of BACnetSpecialEventPeriod.")
 	}
 	_child = _childTemp.(BACnetSpecialEventPeriodChildSerializeRequirement)
 
diff --git a/plc4go/protocols/bacnetip/readwrite/model/BACnetTimeStamp.go b/plc4go/protocols/bacnetip/readwrite/model/BACnetTimeStamp.go
index 6d9179dc9..39db06ef4 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/BACnetTimeStamp.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/BACnetTimeStamp.go
@@ -167,11 +167,10 @@ func BACnetTimeStampParse(readBuffer utils.ReadBuffer) (BACnetTimeStamp, error)
 	case peekedTagNumber == uint8(2): // BACnetTimeStampDateTime
 		_childTemp, typeSwitchError = BACnetTimeStampDateTimeParse(readBuffer)
 	default:
-		// TODO: return actual type
-		typeSwitchError = errors.New("Unmapped type")
+		typeSwitchError = errors.Errorf("Unmapped type for parameters [peekedTagNumber=%v]", peekedTagNumber)
 	}
 	if typeSwitchError != nil {
-		return nil, errors.Wrap(typeSwitchError, "Error parsing sub-type for type-switch.")
+		return nil, errors.Wrap(typeSwitchError, "Error parsing sub-type for type-switch of BACnetTimeStamp.")
 	}
 	_child = _childTemp.(BACnetTimeStampChildSerializeRequirement)
 
diff --git a/plc4go/protocols/bacnetip/readwrite/model/BACnetTimerStateChangeValue.go b/plc4go/protocols/bacnetip/readwrite/model/BACnetTimerStateChangeValue.go
index 5581a71e3..086d89d96 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/BACnetTimerStateChangeValue.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/BACnetTimerStateChangeValue.go
@@ -216,11 +216,10 @@ func BACnetTimerStateChangeValueParse(readBuffer utils.ReadBuffer, objectTypeArg
 	case peekedTagNumber == uint8(3) && peekedIsContextTag == bool(true): // BACnetTimerStateChangeValueLightingCommand
 		_childTemp, typeSwitchError = BACnetTimerStateChangeValueLightingCommandParse(readBuffer, objectTypeArgument)
 	default:
-		// TODO: return actual type
-		typeSwitchError = errors.New("Unmapped type")
+		typeSwitchError = errors.Errorf("Unmapped type for parameters [peekedTagNumber=%v, peekedIsContextTag=%v]", peekedTagNumber, peekedIsContextTag)
 	}
 	if typeSwitchError != nil {
-		return nil, errors.Wrap(typeSwitchError, "Error parsing sub-type for type-switch.")
+		return nil, errors.Wrap(typeSwitchError, "Error parsing sub-type for type-switch of BACnetTimerStateChangeValue.")
 	}
 	_child = _childTemp.(BACnetTimerStateChangeValueChildSerializeRequirement)
 
diff --git a/plc4go/protocols/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequest.go b/plc4go/protocols/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequest.go
index b13bc53c0..e3833a9ee 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequest.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequest.go
@@ -161,11 +161,10 @@ func BACnetUnconfirmedServiceRequestParse(readBuffer utils.ReadBuffer, serviceRe
 	case true: // BACnetUnconfirmedServiceRequestUnknown
 		_childTemp, typeSwitchError = BACnetUnconfirmedServiceRequestUnknownParse(readBuffer, serviceRequestLength)
 	default:
-		// TODO: return actual type
-		typeSwitchError = errors.New("Unmapped type")
+		typeSwitchError = errors.Errorf("Unmapped type for parameters [serviceChoice=%v]", serviceChoice)
 	}
 	if typeSwitchError != nil {
-		return nil, errors.Wrap(typeSwitchError, "Error parsing sub-type for type-switch.")
+		return nil, errors.Wrap(typeSwitchError, "Error parsing sub-type for type-switch of BACnetUnconfirmedServiceRequest.")
 	}
 	_child = _childTemp.(BACnetUnconfirmedServiceRequestChildSerializeRequirement)
 
diff --git a/plc4go/protocols/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestWhoHasObject.go b/plc4go/protocols/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestWhoHasObject.go
index f62a367d5..3f0816d4b 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestWhoHasObject.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/BACnetUnconfirmedServiceRequestWhoHasObject.go
@@ -165,11 +165,10 @@ func BACnetUnconfirmedServiceRequestWhoHasObjectParse(readBuffer utils.ReadBuffe
 	case peekedTagNumber == uint8(3): // BACnetUnconfirmedServiceRequestWhoHasObjectName
 		_childTemp, typeSwitchError = BACnetUnconfirmedServiceRequestWhoHasObjectNameParse(readBuffer)
 	default:
-		// TODO: return actual type
-		typeSwitchError = errors.New("Unmapped type")
+		typeSwitchError = errors.Errorf("Unmapped type for parameters [peekedTagNumber=%v]", peekedTagNumber)
 	}
 	if typeSwitchError != nil {
-		return nil, errors.Wrap(typeSwitchError, "Error parsing sub-type for type-switch.")
+		return nil, errors.Wrap(typeSwitchError, "Error parsing sub-type for type-switch of BACnetUnconfirmedServiceRequestWhoHasObject.")
 	}
 	_child = _childTemp.(BACnetUnconfirmedServiceRequestWhoHasObjectChildSerializeRequirement)
 
diff --git a/plc4go/protocols/bacnetip/readwrite/model/BACnetValueSource.go b/plc4go/protocols/bacnetip/readwrite/model/BACnetValueSource.go
index adf78600c..605b44ae2 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/BACnetValueSource.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/BACnetValueSource.go
@@ -167,11 +167,10 @@ func BACnetValueSourceParse(readBuffer utils.ReadBuffer) (BACnetValueSource, err
 	case peekedTagNumber == uint8(2): // BACnetValueSourceAddress
 		_childTemp, typeSwitchError = BACnetValueSourceAddressParse(readBuffer)
 	default:
-		// TODO: return actual type
-		typeSwitchError = errors.New("Unmapped type")
+		typeSwitchError = errors.Errorf("Unmapped type for parameters [peekedTagNumber=%v]", peekedTagNumber)
 	}
 	if typeSwitchError != nil {
-		return nil, errors.Wrap(typeSwitchError, "Error parsing sub-type for type-switch.")
+		return nil, errors.Wrap(typeSwitchError, "Error parsing sub-type for type-switch of BACnetValueSource.")
 	}
 	_child = _childTemp.(BACnetValueSourceChildSerializeRequirement)
 
diff --git a/plc4go/protocols/bacnetip/readwrite/model/BVLC.go b/plc4go/protocols/bacnetip/readwrite/model/BVLC.go
index 849fe0087..c301ed34d 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/BVLC.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/BVLC.go
@@ -213,11 +213,10 @@ func BVLCParse(readBuffer utils.ReadBuffer) (BVLC, error) {
 	case bvlcFunction == 0x0C: // BVLCSecureBVLL
 		_childTemp, typeSwitchError = BVLCSecureBVLLParse(readBuffer, bvlcPayloadLength)
 	default:
-		// TODO: return actual type
-		typeSwitchError = errors.New("Unmapped type")
+		typeSwitchError = errors.Errorf("Unmapped type for parameters [bvlcFunction=%v]", bvlcFunction)
 	}
 	if typeSwitchError != nil {
-		return nil, errors.Wrap(typeSwitchError, "Error parsing sub-type for type-switch.")
+		return nil, errors.Wrap(typeSwitchError, "Error parsing sub-type for type-switch of BVLC.")
 	}
 	_child = _childTemp.(BVLCChildSerializeRequirement)
 
diff --git a/plc4go/protocols/bacnetip/readwrite/model/NLM.go b/plc4go/protocols/bacnetip/readwrite/model/NLM.go
index c43c49474..d0863d600 100644
--- a/plc4go/protocols/bacnetip/readwrite/model/NLM.go
+++ b/plc4go/protocols/bacnetip/readwrite/model/NLM.go
@@ -186,11 +186,10 @@ func NLMParse(readBuffer utils.ReadBuffer, apduLength uint16) (NLM, error) {
 	case messageType == 0x09: // NLMDisconnectConnectionToNetwork
 		_childTemp, typeSwitchError = NLMDisconnectConnectionToNetworkParse(readBuffer, apduLength, messageType)
 	default:
-		// TODO: return actual type
-		typeSwitchError = errors.New("Unmapped type")
+		typeSwitchError = errors.Errorf("Unmapped type for parameters [messageType=%v]", messageType)
 	}
 	if typeSwitchError != nil {
-		return nil, errors.Wrap(typeSwitchError, "Error parsing sub-type for type-switch.")
+		return nil, errors.Wrap(typeSwitchError, "Error parsing sub-type for type-switch of NLM.")
 	}
 	_child = _childTemp.(NLMChildSerializeRequirement)
 
diff --git a/plc4go/protocols/cbus/readwrite/model/CALData.go b/plc4go/protocols/cbus/readwrite/model/CALData.go
index 27a808934..85c055c95 100644
--- a/plc4go/protocols/cbus/readwrite/model/CALData.go
+++ b/plc4go/protocols/cbus/readwrite/model/CALData.go
@@ -185,11 +185,10 @@ func CALDataParse(readBuffer utils.ReadBuffer) (CALData, error) {
 	case commandType == CALCommandType_STATUS_EXTENDED: // CALDataReplyStatusExtended
 		_childTemp, typeSwitchError = CALDataReplyStatusExtendedParse(readBuffer, commandTypeContainer)
 	default:
-		// TODO: return actual type
-		typeSwitchError = errors.New("Unmapped type")
+		typeSwitchError = errors.Errorf("Unmapped type for parameters [commandType=%v]", commandType)
 	}
 	if typeSwitchError != nil {
-		return nil, errors.Wrap(typeSwitchError, "Error parsing sub-type for type-switch.")
+		return nil, errors.Wrap(typeSwitchError, "Error parsing sub-type for type-switch of CALData.")
 	}
 	_child = _childTemp.(CALDataChildSerializeRequirement)
 
diff --git a/plc4go/protocols/cbus/readwrite/model/CALReply.go b/plc4go/protocols/cbus/readwrite/model/CALReply.go
index b5d617fab..e8c0e3209 100644
--- a/plc4go/protocols/cbus/readwrite/model/CALReply.go
+++ b/plc4go/protocols/cbus/readwrite/model/CALReply.go
@@ -164,11 +164,10 @@ func CALReplyParse(readBuffer utils.ReadBuffer) (CALReply, error) {
 	case true: // CALReplyShort
 		_childTemp, typeSwitchError = CALReplyShortParse(readBuffer)
 	default:
-		// TODO: return actual type
-		typeSwitchError = errors.New("Unmapped type")
+		typeSwitchError = errors.Errorf("Unmapped type for parameters [calType=%v]", calType)
 	}
 	if typeSwitchError != nil {
-		return nil, errors.Wrap(typeSwitchError, "Error parsing sub-type for type-switch.")
+		return nil, errors.Wrap(typeSwitchError, "Error parsing sub-type for type-switch of CALReply.")
 	}
 	_child = _childTemp.(CALReplyChildSerializeRequirement)
 
diff --git a/plc4go/protocols/cbus/readwrite/model/CBusCommand.go b/plc4go/protocols/cbus/readwrite/model/CBusCommand.go
index ef87910ea..855a2a705 100644
--- a/plc4go/protocols/cbus/readwrite/model/CBusCommand.go
+++ b/plc4go/protocols/cbus/readwrite/model/CBusCommand.go
@@ -222,11 +222,10 @@ func CBusCommandParse(readBuffer utils.ReadBuffer, srchk bool) (CBusCommand, err
 	case destinationAddressType == DestinationAddressType_PointToPoint: // CBusCommandPointToPoint
 		_childTemp, typeSwitchError = CBusCommandPointToPointParse(readBuffer, srchk)
 	default:
-		// TODO: return actual type
-		typeSwitchError = errors.Errorf("Unmapped type for destinationAddressType:%v isDeviceManagement:%v", destinationAddressType, isDeviceManagement)
+		typeSwitchError = errors.Errorf("Unmapped type for parameters [destinationAddressType=%v, isDeviceManagement=%v]", destinationAddressType, isDeviceManagement)
 	}
 	if typeSwitchError != nil {
-		return nil, errors.Wrap(typeSwitchError, "Error parsing sub-type for type-switch.")
+		return nil, errors.Wrap(typeSwitchError, "Error parsing sub-type for type-switch of CBusCommand.")
 	}
 	_child = _childTemp.(CBusCommandChildSerializeRequirement)
 
diff --git a/plc4go/protocols/cbus/readwrite/model/CBusMessage.go b/plc4go/protocols/cbus/readwrite/model/CBusMessage.go
index c5c066c71..fb436988b 100644
--- a/plc4go/protocols/cbus/readwrite/model/CBusMessage.go
+++ b/plc4go/protocols/cbus/readwrite/model/CBusMessage.go
@@ -124,11 +124,10 @@ func CBusMessageParse(readBuffer utils.ReadBuffer, response bool, srchk bool) (C
 	case response == bool(true): // CBusMessageToClient
 		_childTemp, typeSwitchError = CBusMessageToClientParse(readBuffer, response, srchk)
 	default:
-		// TODO: return actual type
-		typeSwitchError = errors.New("Unmapped type")
+		typeSwitchError = errors.Errorf("Unmapped type for parameters [response=%v]", response)
 	}
 	if typeSwitchError != nil {
-		return nil, errors.Wrap(typeSwitchError, "Error parsing sub-type for type-switch.")
+		return nil, errors.Wrap(typeSwitchError, "Error parsing sub-type for type-switch of CBusMessage.")
 	}
 	_child = _childTemp.(CBusMessageChildSerializeRequirement)
 
diff --git a/plc4go/protocols/cbus/readwrite/model/CBusPointToMultiPointCommand.go b/plc4go/protocols/cbus/readwrite/model/CBusPointToMultiPointCommand.go
index 306d5a77f..25ca880da 100644
--- a/plc4go/protocols/cbus/readwrite/model/CBusPointToMultiPointCommand.go
+++ b/plc4go/protocols/cbus/readwrite/model/CBusPointToMultiPointCommand.go
@@ -157,11 +157,10 @@ func CBusPointToMultiPointCommandParse(readBuffer utils.ReadBuffer, srchk bool)
 	case true: // CBusPointToMultiPointCommandNormal
 		_childTemp, typeSwitchError = CBusPointToMultiPointCommandNormalParse(readBuffer, srchk)
 	default:
-		// TODO: return actual type
-		typeSwitchError = errors.New("Unmapped type")
+		typeSwitchError = errors.Errorf("Unmapped type for parameters [peekedApplication=%v]", peekedApplication)
 	}
 	if typeSwitchError != nil {
-		return nil, errors.Wrap(typeSwitchError, "Error parsing sub-type for type-switch.")
+		return nil, errors.Wrap(typeSwitchError, "Error parsing sub-type for type-switch of CBusPointToMultiPointCommand.")
 	}
 	_child = _childTemp.(CBusPointToMultiPointCommandChildSerializeRequirement)
 
diff --git a/plc4go/protocols/cbus/readwrite/model/CBusPointToPointCommand.go b/plc4go/protocols/cbus/readwrite/model/CBusPointToPointCommand.go
index e89147300..9ceebf661 100644
--- a/plc4go/protocols/cbus/readwrite/model/CBusPointToPointCommand.go
+++ b/plc4go/protocols/cbus/readwrite/model/CBusPointToPointCommand.go
@@ -226,11 +226,10 @@ func CBusPointToPointCommandParse(readBuffer utils.ReadBuffer, srchk bool) (CBus
 	case isDirect == bool(false): // CBusPointToPointCommandIndirect
 		_childTemp, typeSwitchError = CBusPointToPointCommandIndirectParse(readBuffer, srchk)
 	default:
-		// TODO: return actual type
-		typeSwitchError = errors.New("Unmapped type")
+		typeSwitchError = errors.Errorf("Unmapped type for parameters [isDirect=%v]", isDirect)
 	}
 	if typeSwitchError != nil {
-		return nil, errors.Wrap(typeSwitchError, "Error parsing sub-type for type-switch.")
+		return nil, errors.Wrap(typeSwitchError, "Error parsing sub-type for type-switch of CBusPointToPointCommand.")
 	}
 	_child = _childTemp.(CBusPointToPointCommandChildSerializeRequirement)
 
diff --git a/plc4go/protocols/cbus/readwrite/model/CBusPointToPointToMultipointCommand.go b/plc4go/protocols/cbus/readwrite/model/CBusPointToPointToMultipointCommand.go
index 17f3884a7..e624980b3 100644
--- a/plc4go/protocols/cbus/readwrite/model/CBusPointToPointToMultipointCommand.go
+++ b/plc4go/protocols/cbus/readwrite/model/CBusPointToPointToMultipointCommand.go
@@ -203,11 +203,10 @@ func CBusPointToPointToMultipointCommandParse(readBuffer utils.ReadBuffer, srchk
 	case true: // CBusCommandPointToPointToMultiPointNormal
 		_childTemp, typeSwitchError = CBusCommandPointToPointToMultiPointNormalParse(readBuffer, srchk)
 	default:
-		// TODO: return actual type
-		typeSwitchError = errors.New("Unmapped type")
+		typeSwitchError = errors.Errorf("Unmapped type for parameters [peekedApplication=%v]", peekedApplication)
 	}
 	if typeSwitchError != nil {
-		return nil, errors.Wrap(typeSwitchError, "Error parsing sub-type for type-switch.")
+		return nil, errors.Wrap(typeSwitchError, "Error parsing sub-type for type-switch of CBusPointToPointToMultipointCommand.")
 	}
 	_child = _childTemp.(CBusPointToPointToMultipointCommandChildSerializeRequirement)
 
diff --git a/plc4go/protocols/cbus/readwrite/model/Confirmation.go b/plc4go/protocols/cbus/readwrite/model/Confirmation.go
index 3d0a84d4b..6eeaff51f 100644
--- a/plc4go/protocols/cbus/readwrite/model/Confirmation.go
+++ b/plc4go/protocols/cbus/readwrite/model/Confirmation.go
@@ -168,11 +168,10 @@ func ConfirmationParse(readBuffer utils.ReadBuffer) (Confirmation, error) {
 	case confirmationType == 0x27: // NotTransmittedTooLong
 		_childTemp, typeSwitchError = NotTransmittedTooLongParse(readBuffer)
 	default:
-		// TODO: return actual type
-		typeSwitchError = errors.New("Unmapped type")
+		typeSwitchError = errors.Errorf("Unmapped type for parameters [confirmationType=%v]", confirmationType)
 	}
 	if typeSwitchError != nil {
-		return nil, errors.Wrap(typeSwitchError, "Error parsing sub-type for type-switch.")
+		return nil, errors.Wrap(typeSwitchError, "Error parsing sub-type for type-switch of Confirmation.")
 	}
 	_child = _childTemp.(ConfirmationChildSerializeRequirement)
 
diff --git a/plc4go/protocols/cbus/readwrite/model/IdentifyReplyCommand.go b/plc4go/protocols/cbus/readwrite/model/IdentifyReplyCommand.go
index ac6f99202..af033aa97 100644
--- a/plc4go/protocols/cbus/readwrite/model/IdentifyReplyCommand.go
+++ b/plc4go/protocols/cbus/readwrite/model/IdentifyReplyCommand.go
@@ -153,11 +153,10 @@ func IdentifyReplyCommandParse(readBuffer utils.ReadBuffer, attribute Attribute)
 	case attribute == Attribute_DSIStatus: // IdentifyReplyCommandDSIStatus
 		_childTemp, typeSwitchError = IdentifyReplyCommandDSIStatusParse(readBuffer, attribute)
 	default:
-		// TODO: return actual type
-		typeSwitchError = errors.New("Unmapped type")
+		typeSwitchError = errors.Errorf("Unmapped type for parameters [attribute=%v]", attribute)
 	}
 	if typeSwitchError != nil {
-		return nil, errors.Wrap(typeSwitchError, "Error parsing sub-type for type-switch.")
+		return nil, errors.Wrap(typeSwitchError, "Error parsing sub-type for type-switch of IdentifyReplyCommand.")
 	}
 	_child = _childTemp.(IdentifyReplyCommandChildSerializeRequirement)
 
diff --git a/plc4go/protocols/cbus/readwrite/model/MonitoredSAL.go b/plc4go/protocols/cbus/readwrite/model/MonitoredSAL.go
index 26ea23668..8105ceb9f 100644
--- a/plc4go/protocols/cbus/readwrite/model/MonitoredSAL.go
+++ b/plc4go/protocols/cbus/readwrite/model/MonitoredSAL.go
@@ -168,11 +168,10 @@ func MonitoredSALParse(readBuffer utils.ReadBuffer) (MonitoredSAL, error) {
 	case true: // MonitoredSALShortFormBasicMode
 		_childTemp, typeSwitchError = MonitoredSALShortFormBasicModeParse(readBuffer)
 	default:
-		// TODO: return actual type
-		typeSwitchError = errors.New("Unmapped type")
+		typeSwitchError = errors.Errorf("Unmapped type for parameters [salType=%v]", salType)
 	}
 	if typeSwitchError != nil {
-		return nil, errors.Wrap(typeSwitchError, "Error parsing sub-type for type-switch.")
+		return nil, errors.Wrap(typeSwitchError, "Error parsing sub-type for type-switch of MonitoredSAL.")
 	}
 	_child = _childTemp.(MonitoredSALChildSerializeRequirement)
 
diff --git a/plc4go/protocols/cbus/readwrite/model/Reply.go b/plc4go/protocols/cbus/readwrite/model/Reply.go
index b47cba8ea..1c93acef5 100644
--- a/plc4go/protocols/cbus/readwrite/model/Reply.go
+++ b/plc4go/protocols/cbus/readwrite/model/Reply.go
@@ -174,11 +174,10 @@ func ReplyParse(readBuffer utils.ReadBuffer) (Reply, error) {
 	case peekedByte == 0x21: // ExclamationMarkReply
 		_childTemp, typeSwitchError = ExclamationMarkReplyParse(readBuffer)
 	default:
-		// TODO: return actual type
-		typeSwitchError = errors.New("Unmapped type")
+		typeSwitchError = errors.Errorf("Unmapped type for parameters [peekedByte=%v, isAlpha=%v]", peekedByte, isAlpha)
 	}
 	if typeSwitchError != nil {
-		return nil, errors.Wrap(typeSwitchError, "Error parsing sub-type for type-switch.")
+		return nil, errors.Wrap(typeSwitchError, "Error parsing sub-type for type-switch of Reply.")
 	}
 	_child = _childTemp.(ReplyChildSerializeRequirement)
 
diff --git a/plc4go/protocols/cbus/readwrite/model/Request.go b/plc4go/protocols/cbus/readwrite/model/Request.go
index 8cdc5bcb3..84767415d 100644
--- a/plc4go/protocols/cbus/readwrite/model/Request.go
+++ b/plc4go/protocols/cbus/readwrite/model/Request.go
@@ -151,11 +151,10 @@ func RequestParse(readBuffer utils.ReadBuffer, srchk bool) (Request, error) {
 	case peekedByte == 0x5C: // RequestCommand
 		_childTemp, typeSwitchError = RequestCommandParse(readBuffer, srchk)
 	default:
-		// TODO: return actual type
-		typeSwitchError = errors.New("Unmapped type")
+		typeSwitchError = errors.Errorf("Unmapped type for parameters [peekedByte=%v]", peekedByte)
 	}
 	if typeSwitchError != nil {
-		return nil, errors.Wrap(typeSwitchError, "Error parsing sub-type for type-switch.")
+		return nil, errors.Wrap(typeSwitchError, "Error parsing sub-type for type-switch of Request.")
 	}
 	_child = _childTemp.(RequestChildSerializeRequirement)
 
diff --git a/plc4go/protocols/cbus/readwrite/model/SALData.go b/plc4go/protocols/cbus/readwrite/model/SALData.go
index 6dc44130e..6f33bb864 100644
--- a/plc4go/protocols/cbus/readwrite/model/SALData.go
+++ b/plc4go/protocols/cbus/readwrite/model/SALData.go
@@ -177,11 +177,10 @@ func SALDataParse(readBuffer utils.ReadBuffer) (SALData, error) {
 	case commandType == SALCommandType_TERMINATE_RAMP: // SALDataTerminateRamp
 		_childTemp, typeSwitchError = SALDataTerminateRampParse(readBuffer)
 	default:
-		// TODO: return actual type
-		typeSwitchError = errors.New("Unmapped type")
+		typeSwitchError = errors.Errorf("Unmapped type for parameters [commandType=%v]", commandType)
 	}
 	if typeSwitchError != nil {
-		return nil, errors.Wrap(typeSwitchError, "Error parsing sub-type for type-switch.")
+		return nil, errors.Wrap(typeSwitchError, "Error parsing sub-type for type-switch of SALData.")
 	}
 	_child = _childTemp.(SALDataChildSerializeRequirement)
 
diff --git a/plc4go/protocols/cbus/readwrite/model/StatusRequest.go b/plc4go/protocols/cbus/readwrite/model/StatusRequest.go
index 0dec06978..930ed3449 100644
--- a/plc4go/protocols/cbus/readwrite/model/StatusRequest.go
+++ b/plc4go/protocols/cbus/readwrite/model/StatusRequest.go
@@ -144,11 +144,10 @@ func StatusRequestParse(readBuffer utils.ReadBuffer) (StatusRequest, error) {
 	case statusType == 0x73: // StatusRequestLevel
 		_childTemp, typeSwitchError = StatusRequestLevelParse(readBuffer)
 	default:
-		// TODO: return actual type
-		typeSwitchError = errors.New("Unmapped type")
+		typeSwitchError = errors.Errorf("Unmapped type for parameters [statusType=%v]", statusType)
 	}
 	if typeSwitchError != nil {
-		return nil, errors.Wrap(typeSwitchError, "Error parsing sub-type for type-switch.")
+		return nil, errors.Wrap(typeSwitchError, "Error parsing sub-type for type-switch of StatusRequest.")
 	}
 	_child = _childTemp.(StatusRequestChildSerializeRequirement)
 
diff --git a/plc4go/protocols/df1/readwrite/model/DF1Command.go b/plc4go/protocols/df1/readwrite/model/DF1Command.go
index 701a194a7..de2deedb7 100644
--- a/plc4go/protocols/df1/readwrite/model/DF1Command.go
+++ b/plc4go/protocols/df1/readwrite/model/DF1Command.go
@@ -173,11 +173,10 @@ func DF1CommandParse(readBuffer utils.ReadBuffer) (DF1Command, error) {
 	case commandCode == 0x41: // DF1UnprotectedReadResponse
 		_childTemp, typeSwitchError = DF1UnprotectedReadResponseParse(readBuffer)
 	default:
-		// TODO: return actual type
-		typeSwitchError = errors.New("Unmapped type")
+		typeSwitchError = errors.Errorf("Unmapped type for parameters [commandCode=%v]", commandCode)
 	}
 	if typeSwitchError != nil {
-		return nil, errors.Wrap(typeSwitchError, "Error parsing sub-type for type-switch.")
+		return nil, errors.Wrap(typeSwitchError, "Error parsing sub-type for type-switch of DF1Command.")
 	}
 	_child = _childTemp.(DF1CommandChildSerializeRequirement)
 
diff --git a/plc4go/protocols/df1/readwrite/model/DF1Symbol.go b/plc4go/protocols/df1/readwrite/model/DF1Symbol.go
index c58fb5c71..2756140e9 100644
--- a/plc4go/protocols/df1/readwrite/model/DF1Symbol.go
+++ b/plc4go/protocols/df1/readwrite/model/DF1Symbol.go
@@ -161,11 +161,10 @@ func DF1SymbolParse(readBuffer utils.ReadBuffer) (DF1Symbol, error) {
 	case symbolType == 0x15: // DF1SymbolMessageFrameNAK
 		_childTemp, typeSwitchError = DF1SymbolMessageFrameNAKParse(readBuffer)
 	default:
-		// TODO: return actual type
-		typeSwitchError = errors.New("Unmapped type")
+		typeSwitchError = errors.Errorf("Unmapped type for parameters [symbolType=%v]", symbolType)
 	}
 	if typeSwitchError != nil {
-		return nil, errors.Wrap(typeSwitchError, "Error parsing sub-type for type-switch.")
+		return nil, errors.Wrap(typeSwitchError, "Error parsing sub-type for type-switch of DF1Symbol.")
 	}
 	_child = _childTemp.(DF1SymbolChildSerializeRequirement)
 
diff --git a/plc4go/protocols/eip/readwrite/model/CipService.go b/plc4go/protocols/eip/readwrite/model/CipService.go
index 7da967dd4..f5d8b10a6 100644
--- a/plc4go/protocols/eip/readwrite/model/CipService.go
+++ b/plc4go/protocols/eip/readwrite/model/CipService.go
@@ -142,11 +142,10 @@ func CipServiceParse(readBuffer utils.ReadBuffer, serviceLen uint16) (CipService
 	case service == 0x52: // CipUnconnectedRequest
 		_childTemp, typeSwitchError = CipUnconnectedRequestParse(readBuffer, serviceLen)
 	default:
-		// TODO: return actual type
-		typeSwitchError = errors.New("Unmapped type")
+		typeSwitchError = errors.Errorf("Unmapped type for parameters [service=%v]", service)
 	}
 	if typeSwitchError != nil {
-		return nil, errors.Wrap(typeSwitchError, "Error parsing sub-type for type-switch.")
+		return nil, errors.Wrap(typeSwitchError, "Error parsing sub-type for type-switch of CipService.")
 	}
 	_child = _childTemp.(CipServiceChildSerializeRequirement)
 
diff --git a/plc4go/protocols/eip/readwrite/model/EipPacket.go b/plc4go/protocols/eip/readwrite/model/EipPacket.go
index d3a48a84e..f35681d41 100644
--- a/plc4go/protocols/eip/readwrite/model/EipPacket.go
+++ b/plc4go/protocols/eip/readwrite/model/EipPacket.go
@@ -237,11 +237,10 @@ func EipPacketParse(readBuffer utils.ReadBuffer) (EipPacket, error) {
 	case command == 0x006F: // CipRRData
 		_childTemp, typeSwitchError = CipRRDataParse(readBuffer, packetLength)
 	default:
-		// TODO: return actual type
-		typeSwitchError = errors.New("Unmapped type")
+		typeSwitchError = errors.Errorf("Unmapped type for parameters [command=%v]", command)
 	}
 	if typeSwitchError != nil {
-		return nil, errors.Wrap(typeSwitchError, "Error parsing sub-type for type-switch.")
+		return nil, errors.Wrap(typeSwitchError, "Error parsing sub-type for type-switch of EipPacket.")
 	}
 	_child = _childTemp.(EipPacketChildSerializeRequirement)
 
diff --git a/plc4go/protocols/firmata/readwrite/model/FirmataCommand.go b/plc4go/protocols/firmata/readwrite/model/FirmataCommand.go
index ef55f37f9..2beefce20 100644
--- a/plc4go/protocols/firmata/readwrite/model/FirmataCommand.go
+++ b/plc4go/protocols/firmata/readwrite/model/FirmataCommand.go
@@ -138,11 +138,10 @@ func FirmataCommandParse(readBuffer utils.ReadBuffer, response bool) (FirmataCom
 	case commandCode == 0xF: // FirmataCommandSystemReset
 		_childTemp, typeSwitchError = FirmataCommandSystemResetParse(readBuffer, response)
 	default:
-		// TODO: return actual type
-		typeSwitchError = errors.New("Unmapped type")
+		typeSwitchError = errors.Errorf("Unmapped type for parameters [commandCode=%v]", commandCode)
 	}
 	if typeSwitchError != nil {
-		return nil, errors.Wrap(typeSwitchError, "Error parsing sub-type for type-switch.")
+		return nil, errors.Wrap(typeSwitchError, "Error parsing sub-type for type-switch of FirmataCommand.")
 	}
 	_child = _childTemp.(FirmataCommandChildSerializeRequirement)
 
diff --git a/plc4go/protocols/firmata/readwrite/model/FirmataMessage.go b/plc4go/protocols/firmata/readwrite/model/FirmataMessage.go
index 5ff958249..347675fec 100644
--- a/plc4go/protocols/firmata/readwrite/model/FirmataMessage.go
+++ b/plc4go/protocols/firmata/readwrite/model/FirmataMessage.go
@@ -138,11 +138,10 @@ func FirmataMessageParse(readBuffer utils.ReadBuffer, response bool) (FirmataMes
 	case messageType == 0xF: // FirmataMessageCommand
 		_childTemp, typeSwitchError = FirmataMessageCommandParse(readBuffer, response)
 	default:
-		// TODO: return actual type
-		typeSwitchError = errors.New("Unmapped type")
+		typeSwitchError = errors.Errorf("Unmapped type for parameters [messageType=%v]", messageType)
 	}
 	if typeSwitchError != nil {
-		return nil, errors.Wrap(typeSwitchError, "Error parsing sub-type for type-switch.")
+		return nil, errors.Wrap(typeSwitchError, "Error parsing sub-type for type-switch of FirmataMessage.")
 	}
 	_child = _childTemp.(FirmataMessageChildSerializeRequirement)
 
diff --git a/plc4go/protocols/firmata/readwrite/model/SysexCommand.go b/plc4go/protocols/firmata/readwrite/model/SysexCommand.go
index 5b5f91833..32da3a84e 100644
--- a/plc4go/protocols/firmata/readwrite/model/SysexCommand.go
+++ b/plc4go/protocols/firmata/readwrite/model/SysexCommand.go
@@ -158,11 +158,10 @@ func SysexCommandParse(readBuffer utils.ReadBuffer, response bool) (SysexCommand
 	case commandType == 0x7F: // SysexCommandSysexRealtime
 		_childTemp, typeSwitchError = SysexCommandSysexRealtimeParse(readBuffer, response)
 	default:
-		// TODO: return actual type
-		typeSwitchError = errors.New("Unmapped type")
+		typeSwitchError = errors.Errorf("Unmapped type for parameters [commandType=%v, response=%v]", commandType, response)
 	}
 	if typeSwitchError != nil {
-		return nil, errors.Wrap(typeSwitchError, "Error parsing sub-type for type-switch.")
+		return nil, errors.Wrap(typeSwitchError, "Error parsing sub-type for type-switch of SysexCommand.")
 	}
 	_child = _childTemp.(SysexCommandChildSerializeRequirement)
 
diff --git a/plc4go/protocols/knxnetip/readwrite/model/Apdu.go b/plc4go/protocols/knxnetip/readwrite/model/Apdu.go
index 681676917..92f919291 100644
--- a/plc4go/protocols/knxnetip/readwrite/model/Apdu.go
+++ b/plc4go/protocols/knxnetip/readwrite/model/Apdu.go
@@ -176,11 +176,10 @@ func ApduParse(readBuffer utils.ReadBuffer, dataLength uint8) (Apdu, error) {
 	case control == uint8(0): // ApduDataContainer
 		_childTemp, typeSwitchError = ApduDataContainerParse(readBuffer, dataLength)
 	default:
-		// TODO: return actual type
-		typeSwitchError = errors.New("Unmapped type")
+		typeSwitchError = errors.Errorf("Unmapped type for parameters [control=%v]", control)
 	}
 	if typeSwitchError != nil {
-		return nil, errors.Wrap(typeSwitchError, "Error parsing sub-type for type-switch.")
+		return nil, errors.Wrap(typeSwitchError, "Error parsing sub-type for type-switch of Apdu.")
 	}
 	_child = _childTemp.(ApduChildSerializeRequirement)
 
diff --git a/plc4go/protocols/knxnetip/readwrite/model/ApduControl.go b/plc4go/protocols/knxnetip/readwrite/model/ApduControl.go
index aac9cfbc0..109fb8381 100644
--- a/plc4go/protocols/knxnetip/readwrite/model/ApduControl.go
+++ b/plc4go/protocols/knxnetip/readwrite/model/ApduControl.go
@@ -133,11 +133,10 @@ func ApduControlParse(readBuffer utils.ReadBuffer) (ApduControl, error) {
 	case controlType == 0x3: // ApduControlNack
 		_childTemp, typeSwitchError = ApduControlNackParse(readBuffer)
 	default:
-		// TODO: return actual type
-		typeSwitchError = errors.New("Unmapped type")
+		typeSwitchError = errors.Errorf("Unmapped type for parameters [controlType=%v]", controlType)
 	}
 	if typeSwitchError != nil {
-		return nil, errors.Wrap(typeSwitchError, "Error parsing sub-type for type-switch.")
+		return nil, errors.Wrap(typeSwitchError, "Error parsing sub-type for type-switch of ApduControl.")
 	}
 	_child = _childTemp.(ApduControlChildSerializeRequirement)
 
diff --git a/plc4go/protocols/knxnetip/readwrite/model/ApduData.go b/plc4go/protocols/knxnetip/readwrite/model/ApduData.go
index e824c6a33..6ac45d8ce 100644
--- a/plc4go/protocols/knxnetip/readwrite/model/ApduData.go
+++ b/plc4go/protocols/knxnetip/readwrite/model/ApduData.go
@@ -160,11 +160,10 @@ func ApduDataParse(readBuffer utils.ReadBuffer, dataLength uint8) (ApduData, err
 	case apciType == 0xF: // ApduDataOther
 		_childTemp, typeSwitchError = ApduDataOtherParse(readBuffer, dataLength)
 	default:
-		// TODO: return actual type
-		typeSwitchError = errors.New("Unmapped type")
+		typeSwitchError = errors.Errorf("Unmapped type for parameters [apciType=%v]", apciType)
 	}
 	if typeSwitchError != nil {
-		return nil, errors.Wrap(typeSwitchError, "Error parsing sub-type for type-switch.")
+		return nil, errors.Wrap(typeSwitchError, "Error parsing sub-type for type-switch of ApduData.")
 	}
 	_child = _childTemp.(ApduDataChildSerializeRequirement)
 
diff --git a/plc4go/protocols/knxnetip/readwrite/model/ApduDataExt.go b/plc4go/protocols/knxnetip/readwrite/model/ApduDataExt.go
index 760328a12..9bb8f4355 100644
--- a/plc4go/protocols/knxnetip/readwrite/model/ApduDataExt.go
+++ b/plc4go/protocols/knxnetip/readwrite/model/ApduDataExt.go
@@ -210,11 +210,10 @@ func ApduDataExtParse(readBuffer utils.ReadBuffer, length uint8) (ApduDataExt, e
 	case extApciType == 0x30: // ApduDataExtFileStreamInfoReport
 		_childTemp, typeSwitchError = ApduDataExtFileStreamInfoReportParse(readBuffer, length)
 	default:
-		// TODO: return actual type
-		typeSwitchError = errors.New("Unmapped type")
+		typeSwitchError = errors.Errorf("Unmapped type for parameters [extApciType=%v]", extApciType)
 	}
 	if typeSwitchError != nil {
-		return nil, errors.Wrap(typeSwitchError, "Error parsing sub-type for type-switch.")
+		return nil, errors.Wrap(typeSwitchError, "Error parsing sub-type for type-switch of ApduDataExt.")
 	}
 	_child = _childTemp.(ApduDataExtChildSerializeRequirement)
 
diff --git a/plc4go/protocols/knxnetip/readwrite/model/CEMI.go b/plc4go/protocols/knxnetip/readwrite/model/CEMI.go
index 3f4476c42..fc6db6b9c 100644
--- a/plc4go/protocols/knxnetip/readwrite/model/CEMI.go
+++ b/plc4go/protocols/knxnetip/readwrite/model/CEMI.go
@@ -174,11 +174,10 @@ func CEMIParse(readBuffer utils.ReadBuffer, size uint16) (CEMI, error) {
 	case messageCode == 0xF0: // MResetInd
 		_childTemp, typeSwitchError = MResetIndParse(readBuffer, size)
 	default:
-		// TODO: return actual type
-		typeSwitchError = errors.New("Unmapped type")
+		typeSwitchError = errors.Errorf("Unmapped type for parameters [messageCode=%v]", messageCode)
 	}
 	if typeSwitchError != nil {
-		return nil, errors.Wrap(typeSwitchError, "Error parsing sub-type for type-switch.")
+		return nil, errors.Wrap(typeSwitchError, "Error parsing sub-type for type-switch of CEMI.")
 	}
 	_child = _childTemp.(CEMIChildSerializeRequirement)
 
diff --git a/plc4go/protocols/knxnetip/readwrite/model/CEMIAdditionalInformation.go b/plc4go/protocols/knxnetip/readwrite/model/CEMIAdditionalInformation.go
index a6015f9ec..b50f59ad6 100644
--- a/plc4go/protocols/knxnetip/readwrite/model/CEMIAdditionalInformation.go
+++ b/plc4go/protocols/knxnetip/readwrite/model/CEMIAdditionalInformation.go
@@ -129,11 +129,10 @@ func CEMIAdditionalInformationParse(readBuffer utils.ReadBuffer) (CEMIAdditional
 	case additionalInformationType == 0x04: // CEMIAdditionalInformationRelativeTimestamp
 		_childTemp, typeSwitchError = CEMIAdditionalInformationRelativeTimestampParse(readBuffer)
 	default:
-		// TODO: return actual type
-		typeSwitchError = errors.New("Unmapped type")
+		typeSwitchError = errors.Errorf("Unmapped type for parameters [additionalInformationType=%v]", additionalInformationType)
 	}
 	if typeSwitchError != nil {
-		return nil, errors.Wrap(typeSwitchError, "Error parsing sub-type for type-switch.")
+		return nil, errors.Wrap(typeSwitchError, "Error parsing sub-type for type-switch of CEMIAdditionalInformation.")
 	}
 	_child = _childTemp.(CEMIAdditionalInformationChildSerializeRequirement)
 
diff --git a/plc4go/protocols/knxnetip/readwrite/model/ComObjectTable.go b/plc4go/protocols/knxnetip/readwrite/model/ComObjectTable.go
index 7adda1bee..bca2e5fb5 100644
--- a/plc4go/protocols/knxnetip/readwrite/model/ComObjectTable.go
+++ b/plc4go/protocols/knxnetip/readwrite/model/ComObjectTable.go
@@ -123,11 +123,10 @@ func ComObjectTableParse(readBuffer utils.ReadBuffer, firmwareType FirmwareType)
 	case firmwareType == FirmwareType_SYSTEM_300: // ComObjectTableRealisationType6
 		_childTemp, typeSwitchError = ComObjectTableRealisationType6Parse(readBuffer, firmwareType)
 	default:
-		// TODO: return actual type
-		typeSwitchError = errors.New("Unmapped type")
+		typeSwitchError = errors.Errorf("Unmapped type for parameters [firmwareType=%v]", firmwareType)
 	}
 	if typeSwitchError != nil {
-		return nil, errors.Wrap(typeSwitchError, "Error parsing sub-type for type-switch.")
+		return nil, errors.Wrap(typeSwitchError, "Error parsing sub-type for type-switch of ComObjectTable.")
 	}
 	_child = _childTemp.(ComObjectTableChildSerializeRequirement)
 
diff --git a/plc4go/protocols/knxnetip/readwrite/model/ConnectionRequestInformation.go b/plc4go/protocols/knxnetip/readwrite/model/ConnectionRequestInformation.go
index e4065fca6..87dffea4e 100644
--- a/plc4go/protocols/knxnetip/readwrite/model/ConnectionRequestInformation.go
+++ b/plc4go/protocols/knxnetip/readwrite/model/ConnectionRequestInformation.go
@@ -139,11 +139,10 @@ func ConnectionRequestInformationParse(readBuffer utils.ReadBuffer) (ConnectionR
 	case connectionType == 0x04: // ConnectionRequestInformationTunnelConnection
 		_childTemp, typeSwitchError = ConnectionRequestInformationTunnelConnectionParse(readBuffer)
 	default:
-		// TODO: return actual type
-		typeSwitchError = errors.New("Unmapped type")
+		typeSwitchError = errors.Errorf("Unmapped type for parameters [connectionType=%v]", connectionType)
 	}
 	if typeSwitchError != nil {
-		return nil, errors.Wrap(typeSwitchError, "Error parsing sub-type for type-switch.")
+		return nil, errors.Wrap(typeSwitchError, "Error parsing sub-type for type-switch of ConnectionRequestInformation.")
 	}
 	_child = _childTemp.(ConnectionRequestInformationChildSerializeRequirement)
 
diff --git a/plc4go/protocols/knxnetip/readwrite/model/ConnectionResponseDataBlock.go b/plc4go/protocols/knxnetip/readwrite/model/ConnectionResponseDataBlock.go
index c5bed8486..e1d74a022 100644
--- a/plc4go/protocols/knxnetip/readwrite/model/ConnectionResponseDataBlock.go
+++ b/plc4go/protocols/knxnetip/readwrite/model/ConnectionResponseDataBlock.go
@@ -139,11 +139,10 @@ func ConnectionResponseDataBlockParse(readBuffer utils.ReadBuffer) (ConnectionRe
 	case connectionType == 0x04: // ConnectionResponseDataBlockTunnelConnection
 		_childTemp, typeSwitchError = ConnectionResponseDataBlockTunnelConnectionParse(readBuffer)
 	default:
-		// TODO: return actual type
-		typeSwitchError = errors.New("Unmapped type")
+		typeSwitchError = errors.Errorf("Unmapped type for parameters [connectionType=%v]", connectionType)
 	}
 	if typeSwitchError != nil {
-		return nil, errors.Wrap(typeSwitchError, "Error parsing sub-type for type-switch.")
+		return nil, errors.Wrap(typeSwitchError, "Error parsing sub-type for type-switch of ConnectionResponseDataBlock.")
 	}
 	_child = _childTemp.(ConnectionResponseDataBlockChildSerializeRequirement)
 
diff --git a/plc4go/protocols/knxnetip/readwrite/model/KnxGroupAddress.go b/plc4go/protocols/knxnetip/readwrite/model/KnxGroupAddress.go
index 77b6862a5..4eaff2c9c 100644
--- a/plc4go/protocols/knxnetip/readwrite/model/KnxGroupAddress.go
+++ b/plc4go/protocols/knxnetip/readwrite/model/KnxGroupAddress.go
@@ -123,11 +123,10 @@ func KnxGroupAddressParse(readBuffer utils.ReadBuffer, numLevels uint8) (KnxGrou
 	case numLevels == uint8(3): // KnxGroupAddress3Level
 		_childTemp, typeSwitchError = KnxGroupAddress3LevelParse(readBuffer, numLevels)
 	default:
-		// TODO: return actual type
-		typeSwitchError = errors.New("Unmapped type")
+		typeSwitchError = errors.Errorf("Unmapped type for parameters [numLevels=%v]", numLevels)
 	}
 	if typeSwitchError != nil {
-		return nil, errors.Wrap(typeSwitchError, "Error parsing sub-type for type-switch.")
+		return nil, errors.Wrap(typeSwitchError, "Error parsing sub-type for type-switch of KnxGroupAddress.")
 	}
 	_child = _childTemp.(KnxGroupAddressChildSerializeRequirement)
 
diff --git a/plc4go/protocols/knxnetip/readwrite/model/KnxNetIpMessage.go b/plc4go/protocols/knxnetip/readwrite/model/KnxNetIpMessage.go
index 96e9ce7ed..18f0b4375 100644
--- a/plc4go/protocols/knxnetip/readwrite/model/KnxNetIpMessage.go
+++ b/plc4go/protocols/knxnetip/readwrite/model/KnxNetIpMessage.go
@@ -207,11 +207,10 @@ func KnxNetIpMessageParse(readBuffer utils.ReadBuffer) (KnxNetIpMessage, error)
 	case msgType == 0x0530: // RoutingIndication
 		_childTemp, typeSwitchError = RoutingIndicationParse(readBuffer)
 	default:
-		// TODO: return actual type
-		typeSwitchError = errors.New("Unmapped type")
+		typeSwitchError = errors.Errorf("Unmapped type for parameters [msgType=%v]", msgType)
 	}
 	if typeSwitchError != nil {
-		return nil, errors.Wrap(typeSwitchError, "Error parsing sub-type for type-switch.")
+		return nil, errors.Wrap(typeSwitchError, "Error parsing sub-type for type-switch of KnxNetIpMessage.")
 	}
 	_child = _childTemp.(KnxNetIpMessageChildSerializeRequirement)
 
diff --git a/plc4go/protocols/knxnetip/readwrite/model/LDataFrame.go b/plc4go/protocols/knxnetip/readwrite/model/LDataFrame.go
index 0c052a31c..fcb43dbd7 100644
--- a/plc4go/protocols/knxnetip/readwrite/model/LDataFrame.go
+++ b/plc4go/protocols/knxnetip/readwrite/model/LDataFrame.go
@@ -243,11 +243,10 @@ func LDataFrameParse(readBuffer utils.ReadBuffer) (LDataFrame, error) {
 	case notAckFrame == bool(false): // LDataFrameACK
 		_childTemp, typeSwitchError = LDataFrameACKParse(readBuffer)
 	default:
-		// TODO: return actual type
-		typeSwitchError = errors.New("Unmapped type")
+		typeSwitchError = errors.Errorf("Unmapped type for parameters [notAckFrame=%v, polling=%v]", notAckFrame, polling)
 	}
 	if typeSwitchError != nil {
-		return nil, errors.Wrap(typeSwitchError, "Error parsing sub-type for type-switch.")
+		return nil, errors.Wrap(typeSwitchError, "Error parsing sub-type for type-switch of LDataFrame.")
 	}
 	_child = _childTemp.(LDataFrameChildSerializeRequirement)
 
diff --git a/plc4go/protocols/knxnetip/readwrite/model/ServiceId.go b/plc4go/protocols/knxnetip/readwrite/model/ServiceId.go
index d2b2b0a6f..3b6833335 100644
--- a/plc4go/protocols/knxnetip/readwrite/model/ServiceId.go
+++ b/plc4go/protocols/knxnetip/readwrite/model/ServiceId.go
@@ -139,11 +139,10 @@ func ServiceIdParse(readBuffer utils.ReadBuffer) (ServiceId, error) {
 	case serviceType == 0x08: // KnxNetObjectServer
 		_childTemp, typeSwitchError = KnxNetObjectServerParse(readBuffer)
 	default:
-		// TODO: return actual type
-		typeSwitchError = errors.New("Unmapped type")
+		typeSwitchError = errors.Errorf("Unmapped type for parameters [serviceType=%v]", serviceType)
 	}
 	if typeSwitchError != nil {
-		return nil, errors.Wrap(typeSwitchError, "Error parsing sub-type for type-switch.")
+		return nil, errors.Wrap(typeSwitchError, "Error parsing sub-type for type-switch of ServiceId.")
 	}
 	_child = _childTemp.(ServiceIdChildSerializeRequirement)
 
diff --git a/plc4go/protocols/modbus/readwrite/model/ModbusADU.go b/plc4go/protocols/modbus/readwrite/model/ModbusADU.go
index c496e26bc..143d37d00 100644
--- a/plc4go/protocols/modbus/readwrite/model/ModbusADU.go
+++ b/plc4go/protocols/modbus/readwrite/model/ModbusADU.go
@@ -126,11 +126,10 @@ func ModbusADUParse(readBuffer utils.ReadBuffer, driverType DriverType, response
 	case driverType == DriverType_MODBUS_ASCII: // ModbusAsciiADU
 		_childTemp, typeSwitchError = ModbusAsciiADUParse(readBuffer, driverType, response)
 	default:
-		// TODO: return actual type
-		typeSwitchError = errors.New("Unmapped type")
+		typeSwitchError = errors.Errorf("Unmapped type for parameters [driverType=%v]", driverType)
 	}
 	if typeSwitchError != nil {
-		return nil, errors.Wrap(typeSwitchError, "Error parsing sub-type for type-switch.")
+		return nil, errors.Wrap(typeSwitchError, "Error parsing sub-type for type-switch of ModbusADU.")
 	}
 	_child = _childTemp.(ModbusADUChildSerializeRequirement)
 
diff --git a/plc4go/protocols/modbus/readwrite/model/ModbusPDU.go b/plc4go/protocols/modbus/readwrite/model/ModbusPDU.go
index b884bb338..897877a60 100644
--- a/plc4go/protocols/modbus/readwrite/model/ModbusPDU.go
+++ b/plc4go/protocols/modbus/readwrite/model/ModbusPDU.go
@@ -217,11 +217,10 @@ func ModbusPDUParse(readBuffer utils.ReadBuffer, response bool) (ModbusPDU, erro
 	case errorFlag == bool(false) && functionFlag == 0x2B && response == bool(true): // ModbusPDUReadDeviceIdentificationResponse
 		_childTemp, typeSwitchError = ModbusPDUReadDeviceIdentificationResponseParse(readBuffer, response)
 	default:
-		// TODO: return actual type
-		typeSwitchError = errors.New("Unmapped type")
+		typeSwitchError = errors.Errorf("Unmapped type for parameters [errorFlag=%v, functionFlag=%v, response=%v]", errorFlag, functionFlag, response)
 	}
 	if typeSwitchError != nil {
-		return nil, errors.Wrap(typeSwitchError, "Error parsing sub-type for type-switch.")
+		return nil, errors.Wrap(typeSwitchError, "Error parsing sub-type for type-switch of ModbusPDU.")
 	}
 	_child = _childTemp.(ModbusPDUChildSerializeRequirement)
 
diff --git a/plc4go/protocols/s7/readwrite/model/COTPPacket.go b/plc4go/protocols/s7/readwrite/model/COTPPacket.go
index f7e90762d..970e3f036 100644
--- a/plc4go/protocols/s7/readwrite/model/COTPPacket.go
+++ b/plc4go/protocols/s7/readwrite/model/COTPPacket.go
@@ -190,11 +190,10 @@ func COTPPacketParse(readBuffer utils.ReadBuffer, cotpLen uint16) (COTPPacket, e
 	case tpduCode == 0x70: // COTPPacketTpduError
 		_childTemp, typeSwitchError = COTPPacketTpduErrorParse(readBuffer, cotpLen)
 	default:
-		// TODO: return actual type
-		typeSwitchError = errors.New("Unmapped type")
+		typeSwitchError = errors.Errorf("Unmapped type for parameters [tpduCode=%v]", tpduCode)
 	}
 	if typeSwitchError != nil {
-		return nil, errors.Wrap(typeSwitchError, "Error parsing sub-type for type-switch.")
+		return nil, errors.Wrap(typeSwitchError, "Error parsing sub-type for type-switch of COTPPacket.")
 	}
 	_child = _childTemp.(COTPPacketChildSerializeRequirement)
 
diff --git a/plc4go/protocols/s7/readwrite/model/COTPParameter.go b/plc4go/protocols/s7/readwrite/model/COTPParameter.go
index f932a819b..0cee1e6d4 100644
--- a/plc4go/protocols/s7/readwrite/model/COTPParameter.go
+++ b/plc4go/protocols/s7/readwrite/model/COTPParameter.go
@@ -148,11 +148,10 @@ func COTPParameterParse(readBuffer utils.ReadBuffer, rest uint8) (COTPParameter,
 	case parameterType == 0xE0: // COTPParameterDisconnectAdditionalInformation
 		_childTemp, typeSwitchError = COTPParameterDisconnectAdditionalInformationParse(readBuffer, rest)
 	default:
-		// TODO: return actual type
-		typeSwitchError = errors.New("Unmapped type")
+		typeSwitchError = errors.Errorf("Unmapped type for parameters [parameterType=%v]", parameterType)
 	}
 	if typeSwitchError != nil {
-		return nil, errors.Wrap(typeSwitchError, "Error parsing sub-type for type-switch.")
+		return nil, errors.Wrap(typeSwitchError, "Error parsing sub-type for type-switch of COTPParameter.")
 	}
 	_child = _childTemp.(COTPParameterChildSerializeRequirement)
 
diff --git a/plc4go/protocols/s7/readwrite/model/S7Address.go b/plc4go/protocols/s7/readwrite/model/S7Address.go
index f1f710278..5c97bb0b3 100644
--- a/plc4go/protocols/s7/readwrite/model/S7Address.go
+++ b/plc4go/protocols/s7/readwrite/model/S7Address.go
@@ -127,11 +127,10 @@ func S7AddressParse(readBuffer utils.ReadBuffer) (S7Address, error) {
 	case addressType == 0x10: // S7AddressAny
 		_childTemp, typeSwitchError = S7AddressAnyParse(readBuffer)
 	default:
-		// TODO: return actual type
-		typeSwitchError = errors.New("Unmapped type")
+		typeSwitchError = errors.Errorf("Unmapped type for parameters [addressType=%v]", addressType)
 	}
 	if typeSwitchError != nil {
-		return nil, errors.Wrap(typeSwitchError, "Error parsing sub-type for type-switch.")
+		return nil, errors.Wrap(typeSwitchError, "Error parsing sub-type for type-switch of S7Address.")
 	}
 	_child = _childTemp.(S7AddressChildSerializeRequirement)
 
diff --git a/plc4go/protocols/s7/readwrite/model/S7DataAlarmMessage.go b/plc4go/protocols/s7/readwrite/model/S7DataAlarmMessage.go
index 95c931cca..a4889f619 100644
--- a/plc4go/protocols/s7/readwrite/model/S7DataAlarmMessage.go
+++ b/plc4go/protocols/s7/readwrite/model/S7DataAlarmMessage.go
@@ -168,11 +168,10 @@ func S7DataAlarmMessageParse(readBuffer utils.ReadBuffer, cpuFunctionType uint8)
 	case cpuFunctionType == 0x08: // S7MessageObjectResponse
 		_childTemp, typeSwitchError = S7MessageObjectResponseParse(readBuffer, cpuFunctionType)
 	default:
-		// TODO: return actual type
-		typeSwitchError = errors.New("Unmapped type")
+		typeSwitchError = errors.Errorf("Unmapped type for parameters [cpuFunctionType=%v]", cpuFunctionType)
 	}
 	if typeSwitchError != nil {
-		return nil, errors.Wrap(typeSwitchError, "Error parsing sub-type for type-switch.")
+		return nil, errors.Wrap(typeSwitchError, "Error parsing sub-type for type-switch of S7DataAlarmMessage.")
 	}
 	_child = _childTemp.(S7DataAlarmMessageChildSerializeRequirement)
 
diff --git a/plc4go/protocols/s7/readwrite/model/S7Message.go b/plc4go/protocols/s7/readwrite/model/S7Message.go
index 61372779d..fb482ae84 100644
--- a/plc4go/protocols/s7/readwrite/model/S7Message.go
+++ b/plc4go/protocols/s7/readwrite/model/S7Message.go
@@ -252,11 +252,10 @@ func S7MessageParse(readBuffer utils.ReadBuffer) (S7Message, error) {
 	case messageType == 0x07: // S7MessageUserData
 		_childTemp, typeSwitchError = S7MessageUserDataParse(readBuffer)
 	default:
-		// TODO: return actual type
-		typeSwitchError = errors.New("Unmapped type")
+		typeSwitchError = errors.Errorf("Unmapped type for parameters [messageType=%v]", messageType)
 	}
 	if typeSwitchError != nil {
-		return nil, errors.Wrap(typeSwitchError, "Error parsing sub-type for type-switch.")
+		return nil, errors.Wrap(typeSwitchError, "Error parsing sub-type for type-switch of S7Message.")
 	}
 	_child = _childTemp.(S7MessageChildSerializeRequirement)
 
diff --git a/plc4go/protocols/s7/readwrite/model/S7Parameter.go b/plc4go/protocols/s7/readwrite/model/S7Parameter.go
index 1efd74502..d4f5c37e3 100644
--- a/plc4go/protocols/s7/readwrite/model/S7Parameter.go
+++ b/plc4go/protocols/s7/readwrite/model/S7Parameter.go
@@ -142,11 +142,10 @@ func S7ParameterParse(readBuffer utils.ReadBuffer, messageType uint8) (S7Paramet
 	case parameterType == 0x01 && messageType == 0x07: // S7ParameterModeTransition
 		_childTemp, typeSwitchError = S7ParameterModeTransitionParse(readBuffer, messageType)
 	default:
-		// TODO: return actual type
-		typeSwitchError = errors.New("Unmapped type")
+		typeSwitchError = errors.Errorf("Unmapped type for parameters [parameterType=%v, messageType=%v]", parameterType, messageType)
 	}
 	if typeSwitchError != nil {
-		return nil, errors.Wrap(typeSwitchError, "Error parsing sub-type for type-switch.")
+		return nil, errors.Wrap(typeSwitchError, "Error parsing sub-type for type-switch of S7Parameter.")
 	}
 	_child = _childTemp.(S7ParameterChildSerializeRequirement)
 
diff --git a/plc4go/protocols/s7/readwrite/model/S7ParameterUserDataItem.go b/plc4go/protocols/s7/readwrite/model/S7ParameterUserDataItem.go
index 595743359..5a5323bdf 100644
--- a/plc4go/protocols/s7/readwrite/model/S7ParameterUserDataItem.go
+++ b/plc4go/protocols/s7/readwrite/model/S7ParameterUserDataItem.go
@@ -127,11 +127,10 @@ func S7ParameterUserDataItemParse(readBuffer utils.ReadBuffer) (S7ParameterUserD
 	case itemType == 0x12: // S7ParameterUserDataItemCPUFunctions
 		_childTemp, typeSwitchError = S7ParameterUserDataItemCPUFunctionsParse(readBuffer)
 	default:
-		// TODO: return actual type
-		typeSwitchError = errors.New("Unmapped type")
+		typeSwitchError = errors.Errorf("Unmapped type for parameters [itemType=%v]", itemType)
 	}
 	if typeSwitchError != nil {
-		return nil, errors.Wrap(typeSwitchError, "Error parsing sub-type for type-switch.")
+		return nil, errors.Wrap(typeSwitchError, "Error parsing sub-type for type-switch of S7ParameterUserDataItem.")
 	}
 	_child = _childTemp.(S7ParameterUserDataItemChildSerializeRequirement)
 
diff --git a/plc4go/protocols/s7/readwrite/model/S7Payload.go b/plc4go/protocols/s7/readwrite/model/S7Payload.go
index 6807f0dbe..2a46d648e 100644
--- a/plc4go/protocols/s7/readwrite/model/S7Payload.go
+++ b/plc4go/protocols/s7/readwrite/model/S7Payload.go
@@ -131,11 +131,10 @@ func S7PayloadParse(readBuffer utils.ReadBuffer, messageType uint8, parameter S7
 	case CastS7Parameter(parameter).GetParameterType() == 0x00 && messageType == 0x07: // S7PayloadUserData
 		_childTemp, typeSwitchError = S7PayloadUserDataParse(readBuffer, messageType, parameter)
 	default:
-		// TODO: return actual type
-		typeSwitchError = errors.New("Unmapped type")
+		typeSwitchError = errors.Errorf("Unmapped type for parameters [parameterparameterType=%v, messageType=%v]", CastS7Parameter(parameter).GetParameterType(), messageType)
 	}
 	if typeSwitchError != nil {
-		return nil, errors.Wrap(typeSwitchError, "Error parsing sub-type for type-switch.")
+		return nil, errors.Wrap(typeSwitchError, "Error parsing sub-type for type-switch of S7Payload.")
 	}
 	_child = _childTemp.(S7PayloadChildSerializeRequirement)
 
diff --git a/plc4go/protocols/s7/readwrite/model/S7PayloadUserDataItem.go b/plc4go/protocols/s7/readwrite/model/S7PayloadUserDataItem.go
index 28c1d1345..3ba258fee 100644
--- a/plc4go/protocols/s7/readwrite/model/S7PayloadUserDataItem.go
+++ b/plc4go/protocols/s7/readwrite/model/S7PayloadUserDataItem.go
@@ -225,11 +225,10 @@ func S7PayloadUserDataItemParse(readBuffer utils.ReadBuffer, cpuFunctionType uin
 	case cpuFunctionType == 0x08 && cpuSubfunction == 0x13: // S7PayloadUserDataItemCpuFunctionAlarmQueryResponse
 		_childTemp, typeSwitchError = S7PayloadUserDataItemCpuFunctionAlarmQueryResponseParse(readBuffer, cpuFunctionType, cpuSubfunction)
 	default:
-		// TODO: return actual type
-		typeSwitchError = errors.New("Unmapped type")
+		typeSwitchError = errors.Errorf("Unmapped type for parameters [cpuFunctionType=%v, cpuSubfunction=%v, dataLength=%v]", cpuFunctionType, cpuSubfunction, dataLength)
 	}
 	if typeSwitchError != nil {
-		return nil, errors.Wrap(typeSwitchError, "Error parsing sub-type for type-switch.")
+		return nil, errors.Wrap(typeSwitchError, "Error parsing sub-type for type-switch of S7PayloadUserDataItem.")
 	}
 	_child = _childTemp.(S7PayloadUserDataItemChildSerializeRequirement)
 
diff --git a/plc4go/protocols/s7/readwrite/model/S7VarRequestParameterItem.go b/plc4go/protocols/s7/readwrite/model/S7VarRequestParameterItem.go
index cb8ea5be3..017b7109b 100644
--- a/plc4go/protocols/s7/readwrite/model/S7VarRequestParameterItem.go
+++ b/plc4go/protocols/s7/readwrite/model/S7VarRequestParameterItem.go
@@ -127,11 +127,10 @@ func S7VarRequestParameterItemParse(readBuffer utils.ReadBuffer) (S7VarRequestPa
 	case itemType == 0x12: // S7VarRequestParameterItemAddress
 		_childTemp, typeSwitchError = S7VarRequestParameterItemAddressParse(readBuffer)
 	default:
-		// TODO: return actual type
-		typeSwitchError = errors.New("Unmapped type")
+		typeSwitchError = errors.Errorf("Unmapped type for parameters [itemType=%v]", itemType)
 	}
 	if typeSwitchError != nil {
-		return nil, errors.Wrap(typeSwitchError, "Error parsing sub-type for type-switch.")
+		return nil, errors.Wrap(typeSwitchError, "Error parsing sub-type for type-switch of S7VarRequestParameterItem.")
 	}
 	_child = _childTemp.(S7VarRequestParameterItemChildSerializeRequirement)