@@ -273,6 +273,11 @@ class ReplayOutcome:
273273 commands : list [Command ]
274274
275275
276+ def _decode_history_result (payload : dict [str , Any ], fallback_codec : str | None ) -> Any :
277+ codec = payload .get ("payload_codec" ) or fallback_codec
278+ return serializer .decode_envelope (payload .get ("result" ), codec = codec )
279+
280+
276281def replay (
277282 workflow_cls : type ,
278283 history_events : Iterable [dict [str , Any ]],
@@ -301,14 +306,14 @@ def replay(
301306 etype = ev .get ("event_type" )
302307 payload = ev .get ("payload" ) or {}
303308 if etype in ("ActivityCompleted" , "activity_completed" ):
304- resolved_results .append (serializer . decode (payload . get ( "result" ), codec = payload_codec ))
309+ resolved_results .append (_decode_history_result (payload , payload_codec ))
305310 elif etype in ("TimerFired" , "timer_fired" ):
306311 resolved_results .append (None )
307312 elif etype in (
308313 "SideEffectRecorded" , "side_effect_recorded" ,
309314 "ChildRunCompleted" , "child_run_completed" ,
310315 ):
311- resolved_results .append (serializer . decode (payload . get ( "result" ), codec = payload_codec ))
316+ resolved_results .append (_decode_history_result (payload , payload_codec ))
312317 elif etype in ("ChildRunFailed" , "child_run_failed" ):
313318 resolved_results .append (ChildWorkflowFailed (
314319 payload .get ("message" , "child workflow failed" )
0 commit comments