parseODIDMessage<T extends ODIDMessage> function
Parses ODID message from array of raw bytes messageData.
Optional parameter T can constrain the expected message type.
Returns ParseResult containing the parsed message and any warnings.
Any parsing errors preventing the message to be constructed will be
thrown as exceptions, subclasses of OdidMessageParseError.
NOTE: Since v0.7.0 this method started raising exceptions instead of null
and returns ParseResult. After upgrading to >=0.7.0, if you wish to keep
the same behavior, replace with tryParseODIDMessage.
Implementation
ParseResult<T> parseODIDMessage<T extends ODIDMessage>(Uint8List messageData) {
final messageType = determineODIDMessageType(messageData);
// Check that message length is exact for non-pack messages
if (messageType != MessagePack && messageData.length != maxMessageSize) {
throw OdidMessageLengthMismatch(
messageData.length,
expected: maxMessageSize,
);
}
final parserFactory = _parserFactories[messageType];
if (parserFactory == null) {
throw Exception('No parser found for message type $messageType');
}
final parser = parserFactory(messageData);
final message = parser.parse();
if (message case T()) {
return ParseResult(message: message, warnings: parser.warnings);
}
throw UnexpectedOdidMessageType(T, messageType);
}