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}'.");
}
}