decode method
Implementation
RitoTextInteractionResponse decode(Uint8List bytes) {
if (bytes.length > ritoMaxWireBytes) {
throw const FormatException('RITOTIR1 exceeds the byte limit.');
}
final reader = RitoBinaryReader(bytes);
reader.expectMagic(_magic, 'text interaction magic');
final version = reader.uint32('text interaction wire version');
if (version != 1) {
reader.fail('unsupported text interaction wire version: $version');
}
if (reader.uint64('text interaction total length') != bytes.length) {
reader.fail('text interaction total length does not match input');
}
final artifactId = reader.externalId('text interaction artifact id');
final tag = reader.uint8('text interaction result tag');
final RitoTextInteractionResult result = switch (tag) {
0 => RitoCaretResult(_caret(reader)),
1 => _selectionResult(reader),
2 => const RitoMissResult(),
3 => RitoBoundaryResult(_tag(reader, RitoSelectionBoundary.values)),
4 => RitoPendingResult(_tag(reader, RitoSelectionBoundary.values)),
5 => RitoUnavailableResult(
_tag(reader, RitoTextInteractionUnavailableReason.values),
),
_ => reader.fail('unknown text interaction result tag: $tag'),
};
reader.finish('text interaction wire message');
return RitoTextInteractionResponse(artifactId: artifactId, result: result);
}