decode method

RitoPublication decode(
  1. Uint8List bytes
)

Implementation

RitoPublication decode(Uint8List bytes) {
  final reader = openRitoWireMessage(
    bytes,
    magic: 'RITOPUB1',
    label: 'publication',
    maxBytes: ritoPublicationMaxWireBytes,
  );
  final protocolVersion = reader.uint32('publication protocol version');
  if (protocolVersion != RitoArtifactDecoder.protocolVersion) {
    reader.fail('unsupported publication protocol version: $protocolVersion');
  }
  final sessionId = reader.externalId('publication session id');
  final metadata = _metadata(reader);
  final spineCount = reader.count('publication spine');
  final spine = <RitoPublicationSpineItem>[
    for (var index = 0; index < spineCount; index += 1) _spineItem(reader),
  ];
  final duplicateHrefs = _validateSpine(reader, spine);
  final toc = _tocEntries(
    reader,
    1,
    _PublicationDecodeState(spine, duplicateHrefs),
  );
  reader.finish('publication wire message');
  return RitoPublication(
    protocolVersion: protocolVersion,
    sessionId: sessionId,
    metadata: metadata,
    spine: spine,
    toc: toc,
  );
}