T decode (Decoder decoder, int offset, int depth)
override
@override T decode(Decoder decoder, int offset, int depth) { // Header. final int maxOrdinal = decoder.decodeUint64(offset); final int data = decoder.decodeUint64(offset + 8); switch (data) { case kAllocPresent: break; // good case kAllocAbsent: throw FidlError('Unexpected null reference', FidlErrorCode.fidlNonNullableTypeWithNullValue); default: throw FidlError('Bad reference encoding', FidlErrorCode.fidlInvalidPresenceIndicator); } // Early exit on empty table. if (maxOrdinal == 0) { return ctor({}); } // Offsets. int envelopeOffset = decoder.claimMemory( maxOrdinal * envelopeSize(decoder.wireFormat), depth); // Envelopes, and fields. final Map<int, dynamic> argv = {}; Map<int, UnknownRawData> unknownData = {}; for (int ordinal = 1; ordinal <= maxOrdinal; ordinal++) { FidlType? fieldType; if (ordinal <= members.length) { fieldType = members[ordinal - 1]; } else { fieldType = null; } final header = _decodeEnvelopeHeader(decoder, envelopeOffset); final field = _decodeEnvelopeContent( decoder, header, envelopeOffset, fieldType ?? UnknownRawDataType( numBytes: header.numBytes, numHandles: header.numHandles), depth + 1, false); if (field != null) { if (fieldType != null) { argv[ordinal] = field; } else { _maybeThrowOnUnknownHandles(resource, field); unknownData[ordinal] = field; } } envelopeOffset += envelopeSize(decoder.wireFormat); } return ctor(argv, unknownData); }