parseODIDMessage<T extends ODIDMessage> function

ParseResult<T> parseODIDMessage<T extends ODIDMessage>(
  1. Uint8List messageData
)

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);
}