decode method
Implementation
RitoNavigationResult decode(Uint8List bytes) {
if (bytes.length > ritoMaxWireBytes) {
throw const FormatException('RITONVR1 exceeds the byte limit.');
}
final reader = RitoBinaryReader(bytes);
reader.expectMagic(_magic, 'navigation magic');
final version = reader.uint32('navigation wire version');
if (version != 1) {
reader.fail('unsupported navigation wire version: $version');
}
if (reader.uint64('navigation total length') != bytes.length) {
reader.fail('navigation total length does not match input');
}
final tag = reader.uint8('navigation result tag');
final RitoNavigationResult result = switch (tag) {
0 => RitoTocEntryResult(
reader.option('toc entry', () => reader.uint32('toc entry')),
),
1 => RitoLocationResult(_location(reader)),
2 => RitoOrderResult(_order(reader)),
3 => RitoLayoutResult(readRitoRevisionLayout(reader)),
_ => reader.fail('unknown navigation result tag: $tag'),
};
reader.finish('navigation wire message');
return result;
}