restoreLazyPayload method
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),
);
}