public static OrchestratorAction ToOrchestratorAction()

in src/WebJobs.Extensions.DurableTask/ProtobufUtils.cs [234:305]


        public static OrchestratorAction ToOrchestratorAction(P.OrchestratorAction a)
        {
            switch (a.OrchestratorActionTypeCase)
            {
                case P.OrchestratorAction.OrchestratorActionTypeOneofCase.ScheduleTask:
                    return new ScheduleTaskOrchestratorAction
                    {
                        Id = a.Id,
                        Input = a.ScheduleTask.Input,
                        Name = a.ScheduleTask.Name,
                        Version = a.ScheduleTask.Version,
                    };
                case P.OrchestratorAction.OrchestratorActionTypeOneofCase.CreateSubOrchestration:
                    return new CreateSubOrchestrationAction
                    {
                        Id = a.Id,
                        Input = a.CreateSubOrchestration.Input,
                        Name = a.CreateSubOrchestration.Name,
                        InstanceId = a.CreateSubOrchestration.InstanceId,
                        Tags = null, // TODO
                        Version = a.CreateSubOrchestration.Version,
                    };
                case P.OrchestratorAction.OrchestratorActionTypeOneofCase.CreateTimer:
                    return new CreateTimerOrchestratorAction
                    {
                        Id = a.Id,
                        FireAt = a.CreateTimer.FireAt.ToDateTime(),
                    };
                case P.OrchestratorAction.OrchestratorActionTypeOneofCase.SendEvent:
                    return new SendEventOrchestratorAction
                    {
                        Id = a.Id,
                        Instance = new OrchestrationInstance
                        {
                            InstanceId = a.SendEvent.Instance.InstanceId,
                            ExecutionId = a.SendEvent.Instance.ExecutionId,
                        },
                        EventName = a.SendEvent.Name,
                        EventData = a.SendEvent.Data,
                    };
                case P.OrchestratorAction.OrchestratorActionTypeOneofCase.CompleteOrchestration:
                    P.CompleteOrchestrationAction? completedAction = a.CompleteOrchestration;
                    var action = new OrchestrationCompleteOrchestratorAction
                    {
                        Id = a.Id,
                        OrchestrationStatus = (OrchestrationStatus)completedAction.OrchestrationStatus,
                        Result = completedAction.Result,
                        Details = completedAction.Details,
                        FailureDetails = GetFailureDetails(completedAction.FailureDetails),
                        NewVersion = completedAction.NewVersion,
                    };

                    if (completedAction.CarryoverEvents?.Count > 0)
                    {
                        foreach (P.HistoryEvent e in completedAction.CarryoverEvents)
                        {
                            // Only raised events are supported for carryover
                            if (e.EventRaised is P.EventRaisedEvent eventRaised)
                            {
                                action.CarryoverEvents.Add(new EventRaisedEvent(e.EventId, eventRaised.Input)
                                {
                                    Name = eventRaised.Name,
                                });
                            }
                        }
                    }

                    return action;
                default:
                    throw new NotSupportedException($"Received unsupported action type '{a.OrchestratorActionTypeCase}'.");
            }
        }