decode static method
Implementation
static ReducerResultMessage decode(BsatnDecoder decoder) {
final requestId = decoder.readU32();
final timestamp = decoder.readU64();
final outcomeTag = decoder.readU8();
UpdateStatus status;
Uint8List? retValue;
List<QuerySetUpdate> querySets;
if (outcomeTag == 0) {
// Ok(ReducerOk { ret_value: Bytes, transaction_update: TransactionUpdate })
final retLen = decoder.readU32();
final retBytes = decoder.readBytes(retLen);
retValue = retLen == 0 ? null : retBytes;
querySets = decoder.readList(() => QuerySetUpdate.decode(decoder));
status = Committed();
} else if (outcomeTag == 1) {
// OkEmpty — unit; zero ret, zero query_sets.
retValue = null;
querySets = const [];
status = Committed();
} else if (outcomeTag == 2) {
// Err(Bytes)
final errLen = decoder.readU32();
final errBytes = decoder.readBytes(errLen);
retValue = null;
querySets = const [];
status = Failed(errBytes);
} else if (outcomeTag == 3) {
// InternalError(Box<str>)
final message = decoder.readString();
retValue = null;
querySets = const [];
status = InternalError(message);
} else {
throw ArgumentError('Unknown ReducerOutcome tag: $outcomeTag');
}
return ReducerResultMessage(
requestId: requestId,
timestamp: timestamp,
status: status,
retValue: retValue,
querySets: querySets,
);
}