restoreLazyPayload method

void restoreLazyPayload(
  1. LazyMessagePayload payload
)

Rehydrates a materialized message from a shared lazy payload view without forcing an eager decode. Packed PPT payloads are restored as outer arguments so decode-on-access still works for classic getters.

Implementation

void restoreLazyPayload(LazyMessagePayload payload) {
  final provider = payload.e2eeProvider ?? _e2eeProvider;
  final runtimeContext = _e2eeRuntimeContext ?? payload.e2eeRuntimeContext;
  transparentBinaryPayload = payload.transparentBinaryPayload;
  _lazyPayloadEncoding = payload.encoding;
  if (payload.packedPayloadBytes != null) {
    arguments = <dynamic>[payload.packedPayloadBytes!];
    argumentsKeywords = null;
    attachE2eeProvider(provider);
    attachE2eeRuntimeContext(runtimeContext);
    retainLazyPayload(
      payload
          .withE2eeProvider(provider)
          .withE2eeRuntimeContext(runtimeContext),
    );
    return;
  }
  setLazyPayload(
    argumentsBytes: payload.argumentsBytes,
    argumentsDecoder: payload.argumentsBytes == null
        ? null
        : (_) => payload.arguments ?? const <dynamic>[],
    argumentsKeywordsBytes: payload.argumentsKeywordsBytes,
    argumentsKeywordsDecoder: payload.argumentsKeywordsBytes == null
        ? null
        : (_) => payload.argumentsKeywords ?? const <String, dynamic>{},
    encoding: payload.encoding,
  );
  if (!payload.hasEncodedArguments) {
    arguments = payload.arguments;
  }
  if (!payload.hasEncodedArgumentsKeywords) {
    argumentsKeywords = payload.argumentsKeywords;
  }
  if (payload.pptDecoded) {
    markPptPayloadDecoded();
  }
  attachE2eeProvider(provider);
  attachE2eeRuntimeContext(runtimeContext);
  retainLazyPayload(
    payload.withE2eeProvider(provider).withE2eeRuntimeContext(runtimeContext),
  );
}