diff --git a/src/Temporalio.SystemNexus.Generator/Program.cs b/src/Temporalio.SystemNexus.Generator/Program.cs index 891414a0..d4635987 100644 --- a/src/Temporalio.SystemNexus.Generator/Program.cs +++ b/src/Temporalio.SystemNexus.Generator/Program.cs @@ -11,16 +11,17 @@ var nexusWitDir = Path.Join(apiProtoDir, "nexus"); var descriptorPath = Path.Join(generatorDir, "obj/SystemNexus/temporal_api.bin"); var stagingOutputDir = Path.Join(generatorDir, "obj/SystemNexus/Generated"); +var stagingWitDir = Path.Join(generatorDir, "obj/SystemNexus/Wit"); var workflowsGeneratedDir = Path.Join(projectDir, "src/Temporalio/Workflows/Generated"); var workerGeneratedDir = Path.Join(projectDir, "src/Temporalio/Worker/Generated"); var obsoleteOutputDir = Path.Join(projectDir, "src/Temporalio/SystemNexus/Generated"); -var operationsPath = Path.Join(workflowsGeneratedDir, "Operations.cs"); EnsureNexGen(); BuildDescriptor(); +PrepareNexusWit(); GenerateNexusApi(); PostProcessGeneratedNexusApi(); -GeneratePayloadVisitor(operationsPath, descriptorPath, workerGeneratedDir); +GeneratePayloadVisitor(descriptorPath, workerGeneratedDir); return 0; void EnsureNexGen() @@ -46,7 +47,7 @@ void BuildDescriptor() "-I=" + protoDir, "--include_imports", "--descriptor_set_out=" + descriptorPath, - Path.Join(apiProtoDir, "temporal/api/workflowservice/v1/request_response.proto"), + Path.Join(apiProtoDir, "temporal/api/workflowservice/v1/service.proto"), }); } @@ -62,22 +63,70 @@ void GenerateNexusApi() NexGenCommand(), new[] { - "generate", - "--lang", "dotnet", - "--input", - Path.Join(nexusWitDir, "workflow-service.wit"), - "--input", - Path.Join(nexusWitDir, "deps"), "--support-file", Path.Join(generatorDir, "wit/deps/nexus-temporal-types/dotnet/TemporalSupport.cs"), "--descriptors", descriptorPath, "--output", stagingOutputDir, + "--native-api", + Path.Join(stagingWitDir, "workflow-service.wit"), + Path.Join(stagingWitDir, "deps"), }); } +void PrepareNexusWit() +{ + RecreateDirectory(stagingWitDir); + foreach (var sourcePath in Directory.GetFiles(nexusWitDir, "*", SearchOption.AllDirectories)) + { + var destinationPath = Path.Join(stagingWitDir, Path.GetRelativePath(nexusWitDir, sourcePath)); + Directory.CreateDirectory(Path.GetDirectoryName(destinationPath)!); + File.Copy(sourcePath, destinationPath); + } + + var modelPath = Path.Join(stagingWitDir, "deps/nexus-temporal-types/model.wit"); + var model = File.ReadAllText(modelPath); + model = model.Replace( + " /// dotnet=\"object?\"\n /// dotnet-to=\"ProtoExtensions.ToPayload\"", + " /// dotnet=\"object?\"\n /// dotnet-from=\"ProtoExtensions.FromPayload\"\n /// dotnet-to=\"ProtoExtensions.ToPayload\""); + model = model.Replace( + " /// @nexus.type dotnet=\"IReadOnlyCollection\" dotnet-to=\"ProtoExtensions.ToPayloads\"", + " /// @nexus.type\n /// dotnet=\"IReadOnlyCollection\"\n /// dotnet-from=\"ProtoExtensions.FromPayloads\"\n /// dotnet-to=\"ProtoExtensions.ToPayloads\""); + model = model.Replace( + " /// dotnet=\"string\"\n /// dotnet-to=\"ProtoExtensions.ToWorkflowTypeProto\"", + " /// dotnet=\"string\"\n /// dotnet-from=\"ProtoExtensions.FromWorkflowTypeProto\"\n /// dotnet-to=\"ProtoExtensions.ToWorkflowTypeProto\""); + model = model.Replace( + " /// dotnet=\"Temporalio.Common.RetryPolicy\"\n /// typescript-import", + " /// dotnet=\"Temporalio.Common.RetryPolicy\"\n /// dotnet-from=\"ProtoExtensions.FromRetryPolicyProto\"\n /// typescript-import"); + model = model.Replace( + " /// dotnet=\"string\"\n /// dotnet-to=\"ProtoExtensions.ToTaskQueueProto\"", + " /// dotnet=\"string\"\n /// dotnet-from=\"ProtoExtensions.FromTaskQueueProto\"\n /// dotnet-to=\"ProtoExtensions.ToTaskQueueProto\""); + model = model.Replace( + " /// dotnet=\"Temporalio.Common.SearchAttributeCollection\"\n /// typescript-import", + " /// dotnet=\"Temporalio.Common.SearchAttributeCollection\"\n /// dotnet-from=\"ProtoExtensions.FromSearchAttributesProto\"\n /// typescript-import"); + model = model.Replace( + " /// dotnet=\"Temporalio.Common.Priority\"\n /// typescript-import", + " /// dotnet=\"Temporalio.Common.Priority\"\n /// dotnet-from=\"ProtoExtensions.FromPriorityProto\"\n /// typescript-import"); + model = model.Replace( + " /// dotnet=\"Temporalio.Common.VersioningOverride\"\n /// typescript-import", + " /// dotnet=\"Temporalio.Common.VersioningOverride\"\n /// dotnet-from=\"ProtoExtensions.FromVersioningOverrideProto\"\n /// typescript-import"); + model = model.Replace( + " /// dotnet=\"System.TimeSpan\"\n /// typescript-import", + " /// dotnet=\"System.TimeSpan\"\n /// dotnet-from=\"ProtoExtensions.FromDurationProto\"\n /// typescript-import"); + model = model.Replace( + " /// @nexus.type python=\"collections.abc.Mapping[str, typing.Any]\" typescript=\"Record\" dotnet=\"IReadOnlyDictionary\"", + " /// @nexus.type\n /// python=\"collections.abc.Mapping[str, typing.Any]\"\n /// typescript=\"Record\"\n /// dotnet=\"IReadOnlyDictionary\"\n /// dotnet-from=\"ProtoExtensions.FromMemoProto\""); + File.WriteAllText(modelPath, model); + + var workflowServicePath = Path.Join(stagingWitDir, "workflow-service.wit"); + var workflowService = File.ReadAllText(workflowServicePath).Replace( + "dotnet=\"TemporalWorkflowContext.WorkflowNamespace\"", + "dotnet=\"TemporalWorkflowContext.WorkflowNamespace()\""); + File.WriteAllText(workflowServicePath, workflowService); +} + void PostProcessGeneratedNexusApi() { RecreateDirectory(workflowsGeneratedDir); @@ -90,7 +139,7 @@ void PostProcessGeneratedNexusApi() WriteWorkflowGeneratedFile("Models.cs"); WriteWorkflowGeneratedFile("Operations.cs"); - WriteWorkflowGeneratedFile("Service.cs"); + WriteWorkflowGeneratedFile("Services.cs", "Service.cs"); WriteWorkflowGeneratedFile(Path.Join("Support", "TemporalSupport.cs"), "TemporalSupport.cs"); } @@ -103,11 +152,11 @@ void WriteWorkflowGeneratedFile(string stagingRelativePath, string? outputFileNa var contents = File.ReadAllText(sourcePath); contents = Regex.Replace( contents, - @"^using (NexGen\.Support|Temporalio\.Workflows);\r?\n", + @"^using (Nexgen\.Support|Temporalio\.Workflows);\r?\n", string.Empty, RegexOptions.Multiline); - contents = contents.Replace("namespace NexGen.Support", "namespace Temporalio.Workflows"); - contents = contents.Replace("NexGen.Support.", string.Empty); + contents = contents.Replace("namespace Nexgen.Support", "namespace Temporalio.Workflows"); + contents = contents.Replace("Nexgen.Support.", string.Empty); File.WriteAllText(destinationPath, contents); } @@ -122,28 +171,11 @@ static void RecreateDirectory(string path) } static void GeneratePayloadVisitor( - string operationsPath, string descriptorPath, string outputDir) { - var generatedDir = Path.GetDirectoryName(operationsPath) ?? - throw new InvalidOperationException($"No directory for {operationsPath}"); - var servicePath = Path.Combine(generatedDir, "Service.cs"); - var source = File.ReadAllText(servicePath); - var operations = ParseOperations(source); - if (operations.Count == 0) - { - throw new InvalidOperationException($"No generated operations found in {servicePath}"); - } - var messages = LoadMessages(descriptorPath); - var messagesByCsharpType = messages.Values.ToDictionary( - message => NormalizeTypeName(message.CsharpType), - message => message); - var operationMessages = operations.Select(operation => - new OperationMessages( - GetMessage(messagesByCsharpType, operation.InputType), - GetMessage(messagesByCsharpType, operation.OutputType))).ToList(); + var operationMessages = LoadWorkflowServiceOperationMessages(descriptorPath, messages); var containsPayloadMemo = new Dictionary(); var emittedVisitors = new HashSet(); var emittedMethods = new HashSet(); @@ -152,6 +184,7 @@ static void GeneratePayloadVisitor( builder.AppendLine("// "); builder.AppendLine("// Generated by Temporalio.SystemNexus.Generator. DO NOT EDIT!"); builder.AppendLine("#nullable enable"); + builder.AppendLine("#pragma warning disable CS0612"); builder.AppendLine(); builder.AppendLine("using System;"); builder.AppendLine("using System.CodeDom.Compiler;"); @@ -170,8 +203,8 @@ static void GeneratePayloadVisitor( foreach (var operation in operationMessages) { - EmitEnvelopeVisitor(builder, operation.Input, emittedVisitors); - EmitEnvelopeVisitor(builder, operation.Output, emittedVisitors); + EmitEnvelopeVisitor(builder, operation.Input, messages, containsPayloadMemo, emittedVisitors); + EmitEnvelopeVisitor(builder, operation.Output, messages, containsPayloadMemo, emittedVisitors); } builder.AppendLine(" };"); @@ -187,13 +220,12 @@ static void GeneratePayloadVisitor( builder.AppendLine(" return false;"); builder.AppendLine(" }"); builder.AppendLine(); - builder.AppendLine(" if (!payload.Metadata.TryGetValue(\"messageType\", out var messageType) ||"); - builder.AppendLine(" !EnvelopeVisitors.TryGetValue(messageType.ToStringUtf8(), out var visit))"); + builder.AppendLine(" if (payload.Metadata.TryGetValue(\"messageType\", out var messageType) &&"); + builder.AppendLine(" EnvelopeVisitors.TryGetValue(messageType.ToStringUtf8(), out var visit))"); builder.AppendLine(" {"); - builder.AppendLine(" return false;"); + builder.AppendLine(" await visit(payload, visitPayload, visitPayloads, visitEnvelope).ConfigureAwait(false);"); builder.AppendLine(" }"); builder.AppendLine(); - builder.AppendLine(" await visit(payload, visitPayload, visitPayloads, visitEnvelope).ConfigureAwait(false);"); builder.AppendLine(" return true;"); builder.AppendLine(" }"); builder.AppendLine(); @@ -209,32 +241,6 @@ static void GeneratePayloadVisitor( File.WriteAllText(Path.Combine(outputDir, "SystemNexusPayloadVisitor.cs"), builder.ToString()); } -static List ParseOperations(string serviceSource) -{ - var operations = new List(); - var serviceMatches = Regex.Matches( - serviceSource, - @"\[NexusService\(""[^""]+""\)\]\s+internal\s+interface\s+\w+\s*\{(?.*?)^\s*\}", - RegexOptions.Multiline | RegexOptions.Singleline, - TimeSpan.FromSeconds(5)); - foreach (Match serviceMatch in serviceMatches) - { - var operationMatches = Regex.Matches( - serviceMatch.Groups["body"].Value, - @"\[NexusOperation\(""[^""]+""\)\]\s+(?[A-Za-z0-9_.:]+)\s+\w+\((?[A-Za-z0-9_.:]+)\s+\w+\);", - RegexOptions.Multiline, - TimeSpan.FromSeconds(5)); - foreach (Match operationMatch in operationMatches) - { - operations.Add(new OperationInfo( - NormalizeTypeName(operationMatch.Groups["input"].Value), - NormalizeTypeName(operationMatch.Groups["output"].Value))); - } - } - - return operations; -} - static IReadOnlyDictionary LoadMessages(string descriptorPath) { var descriptorSet = FileDescriptorSet.Parser.ParseFrom(File.ReadAllBytes(descriptorPath)); @@ -256,6 +262,28 @@ static IReadOnlyDictionary LoadMessages(string descriptorPa return messages; } +static IReadOnlyList LoadWorkflowServiceOperationMessages( + string descriptorPath, + IReadOnlyDictionary messages) +{ + var descriptorSet = FileDescriptorSet.Parser.ParseFrom(File.ReadAllBytes(descriptorPath)); + var workflowService = descriptorSet.File + .Where(file => file.Package == "temporal.api.workflowservice.v1") + .SelectMany(file => file.Service) + .SingleOrDefault(service => service.Name == "WorkflowService") ?? + throw new InvalidOperationException("No WorkflowService descriptor found"); + var operationMessages = workflowService.Method.Select(method => new OperationMessages( + GetMessage(messages, method.InputType), + GetMessage(messages, method.OutputType))) + .ToList(); + if (operationMessages.Count == 0) + { + throw new InvalidOperationException("No WorkflowService methods found"); + } + + return operationMessages; +} + static void AddMessage( Dictionary messages, string protoPrefix, @@ -274,12 +302,12 @@ static void AddMessage( } static MessageInfo GetMessage( - IReadOnlyDictionary messagesByCsharpType, - string csharpType) + IReadOnlyDictionary messages, + string protoTypeName) { - if (!messagesByCsharpType.TryGetValue(NormalizeTypeName(csharpType), out var message)) + if (!TryGetMessage(protoTypeName, messages, out var message)) { - throw new InvalidOperationException($"No protobuf message descriptor found for {csharpType}"); + throw new InvalidOperationException($"No protobuf message descriptor found for {protoTypeName}"); } return message; @@ -288,9 +316,12 @@ static MessageInfo GetMessage( static void EmitEnvelopeVisitor( StringBuilder builder, MessageInfo message, + IReadOnlyDictionary messages, + Dictionary containsPayloadMemo, HashSet emittedVisitors) { - if (!emittedVisitors.Add(message.FullName)) + if (!ContainsPayload(message, messages, containsPayloadMemo) || + !emittedVisitors.Add(message.FullName)) { return; } @@ -311,7 +342,8 @@ static void EmitVisitMethod( Dictionary containsPayloadMemo, HashSet emittedMethods) { - if (!emittedMethods.Add(message.FullName)) + if (!ContainsPayload(message, messages, containsPayloadMemo) || + !emittedMethods.Add(message.FullName)) { return; } @@ -641,11 +673,6 @@ static string NexGenCommand() => static string UniqueLocalName(MessageInfo message, FieldDescriptorProto field, string prefix) => $"{prefix}_{Regex.Replace(message.FullName, @"[^A-Za-z0-9_]", "_")}_{field.Number}"; -static string NormalizeTypeName(string typeName) => - typeName.StartsWith("global::", StringComparison.Ordinal) ? typeName["global::".Length..] : typeName; - -internal sealed record OperationInfo(string InputType, string OutputType); - internal sealed record OperationMessages(MessageInfo Input, MessageInfo Output); internal sealed record MessageInfo(string FullName, string CsharpType, DescriptorProto Descriptor); diff --git a/src/Temporalio.SystemNexus.Generator/wit/deps/nexus-temporal-types/dotnet/TemporalSupport.cs b/src/Temporalio.SystemNexus.Generator/wit/deps/nexus-temporal-types/dotnet/TemporalSupport.cs index ffe8d311..abeb7d97 100644 --- a/src/Temporalio.SystemNexus.Generator/wit/deps/nexus-temporal-types/dotnet/TemporalSupport.cs +++ b/src/Temporalio.SystemNexus.Generator/wit/deps/nexus-temporal-types/dotnet/TemporalSupport.cs @@ -1,17 +1,20 @@ using System; using System.Collections.Generic; +using System.Linq; using System.Linq.Expressions; using System.Reflection; +using System.Threading; using Google.Protobuf.WellKnownTypes; using Temporalio.Common; using Temporalio.Converters; using Temporalio.Workflows; using ApiCommon = Temporalio.Api.Common.V1; using ApiDeployment = Temporalio.Api.Deployment.V1; +using ApiFailure = Temporalio.Api.Failure.V1; using ApiTaskQueue = Temporalio.Api.TaskQueue.V1; using ApiWorkflow = Temporalio.Api.Workflow.V1; -namespace NexGen.Support +namespace Nexgen.Support { internal static class TemporalWorkflowContext { @@ -20,8 +23,18 @@ internal static class TemporalWorkflowContext internal static class TemporalFunctionNames { - internal static (MethodInfo Method, IReadOnlyCollection Args) ExtractCall( - Expression> expression) => ExpressionUtil.ExtractCall(expression); + internal static (MethodInfo Method, IReadOnlyCollection Args) ExtractCall( + Expression expression) + { + if (expression.Body is not MethodCallExpression call) + { + throw new ArgumentException("Expression must be a single method call", nameof(expression)); + } + var method = call.Method; + var args = call.Arguments.Select(arg => Expression.Lambda>( + Expression.Convert(arg, typeof(object))).Compile()()).ToArray(); + return (method, args); + } internal static string WorkflowName(MethodInfo method) { @@ -45,39 +58,141 @@ internal static string SignalName(MethodInfo method) } } + internal static class SystemNexusConverterContext + { + private static readonly AsyncLocal CurrentLocal = new(); + + internal static IPayloadConverter PayloadConverter => Current.PayloadConverter; + + internal static IFailureConverter FailureConverter => Current.FailureConverter; + + private static ConverterContext Current => CurrentLocal.Value ?? throw new InvalidOperationException( + "The System Nexus converter context is only available while a System Nexus transfer type converter is executing."); + + internal static IDisposable Push( + IPayloadConverter payloadConverter, + IFailureConverter failureConverter) + { + var previous = CurrentLocal.Value; + CurrentLocal.Value = new(payloadConverter, failureConverter); + return new PopOnDispose(previous); + } + + private sealed record ConverterContext( + IPayloadConverter PayloadConverter, + IFailureConverter FailureConverter); + + private sealed class PopOnDispose : IDisposable + { + private readonly ConverterContext? previous; + private bool disposed; + + internal PopOnDispose(ConverterContext? previous) => this.previous = previous; + + public void Dispose() + { + if (!disposed) + { + CurrentLocal.Value = previous; + disposed = true; + } + } + } + } + internal static class ProtoExtensions { internal static ApiCommon.WorkflowType ToWorkflowTypeProto(this string value) => new() { Name = value }; + internal static string FromWorkflowTypeProto(ApiCommon.WorkflowType value) => + value.Name; + internal static ApiTaskQueue.TaskQueue ToTaskQueueProto(this string value) => new() { Name = value }; + internal static string FromTaskQueueProto(ApiTaskQueue.TaskQueue value) => + value.Name; + internal static ApiCommon.Payload ToPayload(object? value) => - Workflow.PayloadConverter.ToPayload(value); + SystemNexusConverterContext.PayloadConverter.ToPayload(value); + + internal static object? FromPayload(ApiCommon.Payload payload) => + SystemNexusConverterContext.PayloadConverter.ToValue(payload); internal static ApiCommon.Payloads ToPayloads(IEnumerable values) { var payloads = new ApiCommon.Payloads(); - payloads.Payloads_.AddRange(Workflow.PayloadConverter.ToPayloads(values as IReadOnlyCollection ?? new List(values))); + payloads.Payloads_.AddRange(SystemNexusConverterContext.PayloadConverter.ToPayloads( + values as IReadOnlyCollection ?? new List(values))); return payloads; } + internal static IReadOnlyCollection FromPayloads(ApiCommon.Payloads payloads) => + payloads.Payloads_.Select(FromPayload).ToArray(); + + internal static ApiFailure.Failure ToFailureProto(this Exception value) => + SystemNexusConverterContext.FailureConverter.ToFailure( + value, SystemNexusConverterContext.PayloadConverter); + + internal static Exception FromFailureProto(ApiFailure.Failure value) => + SystemNexusConverterContext.FailureConverter.ToException( + value, SystemNexusConverterContext.PayloadConverter); + internal static Duration ToProto(this TimeSpan value) => Duration.FromTimeSpan(value); + internal static TimeSpan FromDurationProto(Duration value) => + value.ToTimeSpan(); + internal static ApiCommon.RetryPolicy ToProto(this Temporalio.Common.RetryPolicy value) => ToRetryPolicy(value); + internal static Temporalio.Common.RetryPolicy FromRetryPolicyProto(ApiCommon.RetryPolicy value) => + FromRetryPolicy(value); + internal static ApiCommon.Memo ToProto(this IReadOnlyDictionary value) => ToMemo(value); + internal static IReadOnlyDictionary FromMemoProto(ApiCommon.Memo value) => + value.Fields.ToDictionary( + item => item.Key, + item => FromPayload(item.Value)); + internal static ApiCommon.Priority ToProto(this Temporalio.Common.Priority value) => ToPriority(value); + internal static Temporalio.Common.Priority FromPriorityProto(ApiCommon.Priority value) => + new( + value.PriorityKey == 0 ? null : value.PriorityKey, + value.FairnessKey, + value.FairnessWeight == 0 ? null : (float)value.FairnessWeight); + internal static ApiWorkflow.VersioningOverride ToProto(this Temporalio.Common.VersioningOverride value) => ToVersioningOverride(value); + internal static Temporalio.Common.SearchAttributeCollection FromSearchAttributesProto( + ApiCommon.SearchAttributes value) => + Temporalio.Common.SearchAttributeCollection.FromProto(value); + + internal static Temporalio.Common.VersioningOverride? FromVersioningOverrideProto( + ApiWorkflow.VersioningOverride versioningOverride) + { + if (versioningOverride.AutoUpgrade) + { + return new Temporalio.Common.VersioningOverride.AutoUpgrade(); + } + if (versioningOverride.Pinned is { } pinned) + { + return new Temporalio.Common.VersioningOverride.Pinned( + new Temporalio.Common.WorkerDeploymentVersion( + pinned.Version.DeploymentName, + pinned.Version.BuildId), + (Temporalio.Common.VersioningOverride.PinnedOverrideBehavior)pinned.Behavior); + } + return null; + } + private static ApiCommon.RetryPolicy ToRetryPolicy(Temporalio.Common.RetryPolicy policy) { var proto = new ApiCommon.RetryPolicy @@ -97,6 +212,25 @@ private static ApiCommon.RetryPolicy ToRetryPolicy(Temporalio.Common.RetryPolicy return proto; } + private static Temporalio.Common.RetryPolicy FromRetryPolicy(ApiCommon.RetryPolicy policy) + { + var retryPolicy = new Temporalio.Common.RetryPolicy + { + InitialInterval = policy.InitialInterval?.ToTimeSpan() ?? TimeSpan.FromSeconds(1), + BackoffCoefficient = (float)policy.BackoffCoefficient, + MaximumAttempts = policy.MaximumAttempts, + }; + if (policy.MaximumInterval is { } maximumInterval) + { + retryPolicy.MaximumInterval = maximumInterval.ToTimeSpan(); + } + if (policy.NonRetryableErrorTypes.Count > 0) + { + retryPolicy.NonRetryableErrorTypes = policy.NonRetryableErrorTypes.ToArray(); + } + return retryPolicy; + } + private static ApiCommon.Memo ToMemo(IReadOnlyDictionary memo) { var proto = new ApiCommon.Memo(); @@ -106,7 +240,7 @@ private static ApiCommon.Memo ToMemo(IReadOnlyDictionary memo) { throw new ArgumentException($"Memo value for {item.Key} is null", nameof(memo)); } - proto.Fields.Add(item.Key, Workflow.PayloadConverter.ToPayload(item.Value)); + proto.Fields.Add(item.Key, ToPayload(item.Value)); } return proto; } diff --git a/src/Temporalio/Nexus/SystemNexusPayloadConverter.cs b/src/Temporalio/Nexus/SystemNexusPayloadConverter.cs index 954fdbd0..ddca0ae7 100644 --- a/src/Temporalio/Nexus/SystemNexusPayloadConverter.cs +++ b/src/Temporalio/Nexus/SystemNexusPayloadConverter.cs @@ -2,6 +2,7 @@ using Temporalio.Api.Common.V1; using Temporalio.Converters; using Temporalio.Worker; +using Temporalio.Workflows; namespace Temporalio.Nexus { @@ -17,11 +18,26 @@ internal sealed class SystemNexusPayloadConverter : IPayloadConverter TemporalTransferTypePayloadConverter.Wrap( new DefaultPayloadConverter(new BinaryProtoConverter())); + private readonly IFailureConverter failureConverter; + private readonly IPayloadConverter payloadConverter; + + /// + /// Initializes a new instance of the class. + /// + /// Payload converter for the envelope's embedded payloads. + /// Failure converter for the envelope's embedded failures. + internal SystemNexusPayloadConverter( + IPayloadConverter payloadConverter, + IFailureConverter failureConverter) + { + this.payloadConverter = payloadConverter; + this.failureConverter = failureConverter; + } + /// public Payload ToPayload(object? value) { - // TODO: Scope the generated System Nexus support converter context here once the - // generated support file is ingested into the SDK. + using var context = SystemNexusConverterContext.Push(payloadConverter, failureConverter); var payload = OuterPayloadConverter.ToPayload(value); SystemNexusPayloadVisitor.MarkSystemPayload(payload); return payload; @@ -30,6 +46,7 @@ public Payload ToPayload(object? value) /// public object? ToValue(Payload payload, Type type) { + using var context = SystemNexusConverterContext.Push(payloadConverter, failureConverter); return OuterPayloadConverter.ToValue(payload, type); } } diff --git a/src/Temporalio/Worker/Generated/SystemNexusPayloadVisitor.cs b/src/Temporalio/Worker/Generated/SystemNexusPayloadVisitor.cs index 3bab8e5d..de201a10 100644 --- a/src/Temporalio/Worker/Generated/SystemNexusPayloadVisitor.cs +++ b/src/Temporalio/Worker/Generated/SystemNexusPayloadVisitor.cs @@ -1,6 +1,7 @@ // // Generated by Temporalio.SystemNexus.Generator. DO NOT EDIT! #nullable enable +#pragma warning disable CS0612 using System; using System.CodeDom.Compiler; @@ -16,6 +17,160 @@ internal static partial class SystemNexusPayloadVisitor private static readonly IReadOnlyDictionary> EnvelopeVisitors = new Dictionary> { + ["temporal.api.workflowservice.v1.StartWorkflowExecutionRequest"] = (payload, visitPayload, visitPayloads, visitEnvelope) => + VisitEnvelopeAsync( + payload, + Visit_temporal_api_workflowservice_v1_StartWorkflowExecutionRequest, + visitPayload, + visitPayloads, + visitEnvelope), + ["temporal.api.workflowservice.v1.StartWorkflowExecutionResponse"] = (payload, visitPayload, visitPayloads, visitEnvelope) => + VisitEnvelopeAsync( + payload, + Visit_temporal_api_workflowservice_v1_StartWorkflowExecutionResponse, + visitPayload, + visitPayloads, + visitEnvelope), + ["temporal.api.workflowservice.v1.ExecuteMultiOperationRequest"] = (payload, visitPayload, visitPayloads, visitEnvelope) => + VisitEnvelopeAsync( + payload, + Visit_temporal_api_workflowservice_v1_ExecuteMultiOperationRequest, + visitPayload, + visitPayloads, + visitEnvelope), + ["temporal.api.workflowservice.v1.ExecuteMultiOperationResponse"] = (payload, visitPayload, visitPayloads, visitEnvelope) => + VisitEnvelopeAsync( + payload, + Visit_temporal_api_workflowservice_v1_ExecuteMultiOperationResponse, + visitPayload, + visitPayloads, + visitEnvelope), + ["temporal.api.workflowservice.v1.GetWorkflowExecutionHistoryResponse"] = (payload, visitPayload, visitPayloads, visitEnvelope) => + VisitEnvelopeAsync( + payload, + Visit_temporal_api_workflowservice_v1_GetWorkflowExecutionHistoryResponse, + visitPayload, + visitPayloads, + visitEnvelope), + ["temporal.api.workflowservice.v1.GetWorkflowExecutionHistoryReverseResponse"] = (payload, visitPayload, visitPayloads, visitEnvelope) => + VisitEnvelopeAsync( + payload, + Visit_temporal_api_workflowservice_v1_GetWorkflowExecutionHistoryReverseResponse, + visitPayload, + visitPayloads, + visitEnvelope), + ["temporal.api.workflowservice.v1.PollWorkflowTaskQueueResponse"] = (payload, visitPayload, visitPayloads, visitEnvelope) => + VisitEnvelopeAsync( + payload, + Visit_temporal_api_workflowservice_v1_PollWorkflowTaskQueueResponse, + visitPayload, + visitPayloads, + visitEnvelope), + ["temporal.api.workflowservice.v1.RespondWorkflowTaskCompletedRequest"] = (payload, visitPayload, visitPayloads, visitEnvelope) => + VisitEnvelopeAsync( + payload, + Visit_temporal_api_workflowservice_v1_RespondWorkflowTaskCompletedRequest, + visitPayload, + visitPayloads, + visitEnvelope), + ["temporal.api.workflowservice.v1.RespondWorkflowTaskCompletedResponse"] = (payload, visitPayload, visitPayloads, visitEnvelope) => + VisitEnvelopeAsync( + payload, + Visit_temporal_api_workflowservice_v1_RespondWorkflowTaskCompletedResponse, + visitPayload, + visitPayloads, + visitEnvelope), + ["temporal.api.workflowservice.v1.RespondWorkflowTaskFailedRequest"] = (payload, visitPayload, visitPayloads, visitEnvelope) => + VisitEnvelopeAsync( + payload, + Visit_temporal_api_workflowservice_v1_RespondWorkflowTaskFailedRequest, + visitPayload, + visitPayloads, + visitEnvelope), + ["temporal.api.workflowservice.v1.PollActivityTaskQueueResponse"] = (payload, visitPayload, visitPayloads, visitEnvelope) => + VisitEnvelopeAsync( + payload, + Visit_temporal_api_workflowservice_v1_PollActivityTaskQueueResponse, + visitPayload, + visitPayloads, + visitEnvelope), + ["temporal.api.workflowservice.v1.RecordActivityTaskHeartbeatRequest"] = (payload, visitPayload, visitPayloads, visitEnvelope) => + VisitEnvelopeAsync( + payload, + Visit_temporal_api_workflowservice_v1_RecordActivityTaskHeartbeatRequest, + visitPayload, + visitPayloads, + visitEnvelope), + ["temporal.api.workflowservice.v1.RecordActivityTaskHeartbeatByIdRequest"] = (payload, visitPayload, visitPayloads, visitEnvelope) => + VisitEnvelopeAsync( + payload, + Visit_temporal_api_workflowservice_v1_RecordActivityTaskHeartbeatByIdRequest, + visitPayload, + visitPayloads, + visitEnvelope), + ["temporal.api.workflowservice.v1.RespondActivityTaskCompletedRequest"] = (payload, visitPayload, visitPayloads, visitEnvelope) => + VisitEnvelopeAsync( + payload, + Visit_temporal_api_workflowservice_v1_RespondActivityTaskCompletedRequest, + visitPayload, + visitPayloads, + visitEnvelope), + ["temporal.api.workflowservice.v1.RespondActivityTaskCompletedByIdRequest"] = (payload, visitPayload, visitPayloads, visitEnvelope) => + VisitEnvelopeAsync( + payload, + Visit_temporal_api_workflowservice_v1_RespondActivityTaskCompletedByIdRequest, + visitPayload, + visitPayloads, + visitEnvelope), + ["temporal.api.workflowservice.v1.RespondActivityTaskFailedRequest"] = (payload, visitPayload, visitPayloads, visitEnvelope) => + VisitEnvelopeAsync( + payload, + Visit_temporal_api_workflowservice_v1_RespondActivityTaskFailedRequest, + visitPayload, + visitPayloads, + visitEnvelope), + ["temporal.api.workflowservice.v1.RespondActivityTaskFailedResponse"] = (payload, visitPayload, visitPayloads, visitEnvelope) => + VisitEnvelopeAsync( + payload, + Visit_temporal_api_workflowservice_v1_RespondActivityTaskFailedResponse, + visitPayload, + visitPayloads, + visitEnvelope), + ["temporal.api.workflowservice.v1.RespondActivityTaskFailedByIdRequest"] = (payload, visitPayload, visitPayloads, visitEnvelope) => + VisitEnvelopeAsync( + payload, + Visit_temporal_api_workflowservice_v1_RespondActivityTaskFailedByIdRequest, + visitPayload, + visitPayloads, + visitEnvelope), + ["temporal.api.workflowservice.v1.RespondActivityTaskFailedByIdResponse"] = (payload, visitPayload, visitPayloads, visitEnvelope) => + VisitEnvelopeAsync( + payload, + Visit_temporal_api_workflowservice_v1_RespondActivityTaskFailedByIdResponse, + visitPayload, + visitPayloads, + visitEnvelope), + ["temporal.api.workflowservice.v1.RespondActivityTaskCanceledRequest"] = (payload, visitPayload, visitPayloads, visitEnvelope) => + VisitEnvelopeAsync( + payload, + Visit_temporal_api_workflowservice_v1_RespondActivityTaskCanceledRequest, + visitPayload, + visitPayloads, + visitEnvelope), + ["temporal.api.workflowservice.v1.RespondActivityTaskCanceledByIdRequest"] = (payload, visitPayload, visitPayloads, visitEnvelope) => + VisitEnvelopeAsync( + payload, + Visit_temporal_api_workflowservice_v1_RespondActivityTaskCanceledByIdRequest, + visitPayload, + visitPayloads, + visitEnvelope), + ["temporal.api.workflowservice.v1.SignalWorkflowExecutionRequest"] = (payload, visitPayload, visitPayloads, visitEnvelope) => + VisitEnvelopeAsync( + payload, + Visit_temporal_api_workflowservice_v1_SignalWorkflowExecutionRequest, + visitPayload, + visitPayloads, + visitEnvelope), ["temporal.api.workflowservice.v1.SignalWithStartWorkflowExecutionRequest"] = (payload, visitPayload, visitPayloads, visitEnvelope) => VisitEnvelopeAsync( payload, @@ -23,81 +178,2541 @@ internal static partial class SystemNexusPayloadVisitor visitPayload, visitPayloads, visitEnvelope), - ["temporal.api.workflowservice.v1.SignalWithStartWorkflowExecutionResponse"] = (payload, visitPayload, visitPayloads, visitEnvelope) => - VisitEnvelopeAsync( + ["temporal.api.workflowservice.v1.ResetWorkflowExecutionRequest"] = (payload, visitPayload, visitPayloads, visitEnvelope) => + VisitEnvelopeAsync( + payload, + Visit_temporal_api_workflowservice_v1_ResetWorkflowExecutionRequest, + visitPayload, + visitPayloads, + visitEnvelope), + ["temporal.api.workflowservice.v1.TerminateWorkflowExecutionRequest"] = (payload, visitPayload, visitPayloads, visitEnvelope) => + VisitEnvelopeAsync( + payload, + Visit_temporal_api_workflowservice_v1_TerminateWorkflowExecutionRequest, + visitPayload, + visitPayloads, + visitEnvelope), + ["temporal.api.workflowservice.v1.ListOpenWorkflowExecutionsResponse"] = (payload, visitPayload, visitPayloads, visitEnvelope) => + VisitEnvelopeAsync( + payload, + Visit_temporal_api_workflowservice_v1_ListOpenWorkflowExecutionsResponse, + visitPayload, + visitPayloads, + visitEnvelope), + ["temporal.api.workflowservice.v1.ListClosedWorkflowExecutionsResponse"] = (payload, visitPayload, visitPayloads, visitEnvelope) => + VisitEnvelopeAsync( + payload, + Visit_temporal_api_workflowservice_v1_ListClosedWorkflowExecutionsResponse, + visitPayload, + visitPayloads, + visitEnvelope), + ["temporal.api.workflowservice.v1.ListWorkflowExecutionsResponse"] = (payload, visitPayload, visitPayloads, visitEnvelope) => + VisitEnvelopeAsync( + payload, + Visit_temporal_api_workflowservice_v1_ListWorkflowExecutionsResponse, + visitPayload, + visitPayloads, + visitEnvelope), + ["temporal.api.workflowservice.v1.ListArchivedWorkflowExecutionsResponse"] = (payload, visitPayload, visitPayloads, visitEnvelope) => + VisitEnvelopeAsync( + payload, + Visit_temporal_api_workflowservice_v1_ListArchivedWorkflowExecutionsResponse, + visitPayload, + visitPayloads, + visitEnvelope), + ["temporal.api.workflowservice.v1.ScanWorkflowExecutionsResponse"] = (payload, visitPayload, visitPayloads, visitEnvelope) => + VisitEnvelopeAsync( + payload, + Visit_temporal_api_workflowservice_v1_ScanWorkflowExecutionsResponse, + visitPayload, + visitPayloads, + visitEnvelope), + ["temporal.api.workflowservice.v1.CountWorkflowExecutionsResponse"] = (payload, visitPayload, visitPayloads, visitEnvelope) => + VisitEnvelopeAsync( + payload, + Visit_temporal_api_workflowservice_v1_CountWorkflowExecutionsResponse, + visitPayload, + visitPayloads, + visitEnvelope), + ["temporal.api.workflowservice.v1.RespondQueryTaskCompletedRequest"] = (payload, visitPayload, visitPayloads, visitEnvelope) => + VisitEnvelopeAsync( + payload, + Visit_temporal_api_workflowservice_v1_RespondQueryTaskCompletedRequest, + visitPayload, + visitPayloads, + visitEnvelope), + ["temporal.api.workflowservice.v1.QueryWorkflowRequest"] = (payload, visitPayload, visitPayloads, visitEnvelope) => + VisitEnvelopeAsync( + payload, + Visit_temporal_api_workflowservice_v1_QueryWorkflowRequest, + visitPayload, + visitPayloads, + visitEnvelope), + ["temporal.api.workflowservice.v1.QueryWorkflowResponse"] = (payload, visitPayload, visitPayloads, visitEnvelope) => + VisitEnvelopeAsync( + payload, + Visit_temporal_api_workflowservice_v1_QueryWorkflowResponse, + visitPayload, + visitPayloads, + visitEnvelope), + ["temporal.api.workflowservice.v1.DescribeWorkflowExecutionResponse"] = (payload, visitPayload, visitPayloads, visitEnvelope) => + VisitEnvelopeAsync( + payload, + Visit_temporal_api_workflowservice_v1_DescribeWorkflowExecutionResponse, + visitPayload, + visitPayloads, + visitEnvelope), + ["temporal.api.workflowservice.v1.CreateScheduleRequest"] = (payload, visitPayload, visitPayloads, visitEnvelope) => + VisitEnvelopeAsync( + payload, + Visit_temporal_api_workflowservice_v1_CreateScheduleRequest, + visitPayload, + visitPayloads, + visitEnvelope), + ["temporal.api.workflowservice.v1.DescribeScheduleResponse"] = (payload, visitPayload, visitPayloads, visitEnvelope) => + VisitEnvelopeAsync( + payload, + Visit_temporal_api_workflowservice_v1_DescribeScheduleResponse, + visitPayload, + visitPayloads, + visitEnvelope), + ["temporal.api.workflowservice.v1.UpdateScheduleRequest"] = (payload, visitPayload, visitPayloads, visitEnvelope) => + VisitEnvelopeAsync( + payload, + Visit_temporal_api_workflowservice_v1_UpdateScheduleRequest, + visitPayload, + visitPayloads, + visitEnvelope), + ["temporal.api.workflowservice.v1.ListSchedulesResponse"] = (payload, visitPayload, visitPayloads, visitEnvelope) => + VisitEnvelopeAsync( + payload, + Visit_temporal_api_workflowservice_v1_ListSchedulesResponse, + visitPayload, + visitPayloads, + visitEnvelope), + ["temporal.api.workflowservice.v1.CountSchedulesResponse"] = (payload, visitPayload, visitPayloads, visitEnvelope) => + VisitEnvelopeAsync( + payload, + Visit_temporal_api_workflowservice_v1_CountSchedulesResponse, + visitPayload, + visitPayloads, + visitEnvelope), + ["temporal.api.workflowservice.v1.DescribeDeploymentResponse"] = (payload, visitPayload, visitPayloads, visitEnvelope) => + VisitEnvelopeAsync( + payload, + Visit_temporal_api_workflowservice_v1_DescribeDeploymentResponse, + visitPayload, + visitPayloads, + visitEnvelope), + ["temporal.api.workflowservice.v1.DescribeWorkerDeploymentVersionResponse"] = (payload, visitPayload, visitPayloads, visitEnvelope) => + VisitEnvelopeAsync( + payload, + Visit_temporal_api_workflowservice_v1_DescribeWorkerDeploymentVersionResponse, + visitPayload, + visitPayloads, + visitEnvelope), + ["temporal.api.workflowservice.v1.GetDeploymentReachabilityResponse"] = (payload, visitPayload, visitPayloads, visitEnvelope) => + VisitEnvelopeAsync( + payload, + Visit_temporal_api_workflowservice_v1_GetDeploymentReachabilityResponse, + visitPayload, + visitPayloads, + visitEnvelope), + ["temporal.api.workflowservice.v1.GetCurrentDeploymentResponse"] = (payload, visitPayload, visitPayloads, visitEnvelope) => + VisitEnvelopeAsync( + payload, + Visit_temporal_api_workflowservice_v1_GetCurrentDeploymentResponse, + visitPayload, + visitPayloads, + visitEnvelope), + ["temporal.api.workflowservice.v1.SetCurrentDeploymentRequest"] = (payload, visitPayload, visitPayloads, visitEnvelope) => + VisitEnvelopeAsync( + payload, + Visit_temporal_api_workflowservice_v1_SetCurrentDeploymentRequest, + visitPayload, + visitPayloads, + visitEnvelope), + ["temporal.api.workflowservice.v1.SetCurrentDeploymentResponse"] = (payload, visitPayload, visitPayloads, visitEnvelope) => + VisitEnvelopeAsync( + payload, + Visit_temporal_api_workflowservice_v1_SetCurrentDeploymentResponse, + visitPayload, + visitPayloads, + visitEnvelope), + ["temporal.api.workflowservice.v1.CreateWorkerDeploymentVersionRequest"] = (payload, visitPayload, visitPayloads, visitEnvelope) => + VisitEnvelopeAsync( + payload, + Visit_temporal_api_workflowservice_v1_CreateWorkerDeploymentVersionRequest, + visitPayload, + visitPayloads, + visitEnvelope), + ["temporal.api.workflowservice.v1.UpdateWorkerDeploymentVersionComputeConfigRequest"] = (payload, visitPayload, visitPayloads, visitEnvelope) => + VisitEnvelopeAsync( + payload, + Visit_temporal_api_workflowservice_v1_UpdateWorkerDeploymentVersionComputeConfigRequest, + visitPayload, + visitPayloads, + visitEnvelope), + ["temporal.api.workflowservice.v1.ValidateWorkerDeploymentVersionComputeConfigRequest"] = (payload, visitPayload, visitPayloads, visitEnvelope) => + VisitEnvelopeAsync( + payload, + Visit_temporal_api_workflowservice_v1_ValidateWorkerDeploymentVersionComputeConfigRequest, + visitPayload, + visitPayloads, + visitEnvelope), + ["temporal.api.workflowservice.v1.UpdateWorkerDeploymentVersionMetadataRequest"] = (payload, visitPayload, visitPayloads, visitEnvelope) => + VisitEnvelopeAsync( + payload, + Visit_temporal_api_workflowservice_v1_UpdateWorkerDeploymentVersionMetadataRequest, + visitPayload, + visitPayloads, + visitEnvelope), + ["temporal.api.workflowservice.v1.UpdateWorkerDeploymentVersionMetadataResponse"] = (payload, visitPayload, visitPayloads, visitEnvelope) => + VisitEnvelopeAsync( + payload, + Visit_temporal_api_workflowservice_v1_UpdateWorkerDeploymentVersionMetadataResponse, + visitPayload, + visitPayloads, + visitEnvelope), + ["temporal.api.workflowservice.v1.UpdateWorkflowExecutionRequest"] = (payload, visitPayload, visitPayloads, visitEnvelope) => + VisitEnvelopeAsync( + payload, + Visit_temporal_api_workflowservice_v1_UpdateWorkflowExecutionRequest, + visitPayload, + visitPayloads, + visitEnvelope), + ["temporal.api.workflowservice.v1.UpdateWorkflowExecutionResponse"] = (payload, visitPayload, visitPayloads, visitEnvelope) => + VisitEnvelopeAsync( + payload, + Visit_temporal_api_workflowservice_v1_UpdateWorkflowExecutionResponse, + visitPayload, + visitPayloads, + visitEnvelope), + ["temporal.api.workflowservice.v1.PollWorkflowExecutionUpdateResponse"] = (payload, visitPayload, visitPayloads, visitEnvelope) => + VisitEnvelopeAsync( + payload, + Visit_temporal_api_workflowservice_v1_PollWorkflowExecutionUpdateResponse, + visitPayload, + visitPayloads, + visitEnvelope), + ["temporal.api.workflowservice.v1.StartBatchOperationRequest"] = (payload, visitPayload, visitPayloads, visitEnvelope) => + VisitEnvelopeAsync( + payload, + Visit_temporal_api_workflowservice_v1_StartBatchOperationRequest, + visitPayload, + visitPayloads, + visitEnvelope), + ["temporal.api.workflowservice.v1.PollNexusTaskQueueResponse"] = (payload, visitPayload, visitPayloads, visitEnvelope) => + VisitEnvelopeAsync( + payload, + Visit_temporal_api_workflowservice_v1_PollNexusTaskQueueResponse, + visitPayload, + visitPayloads, + visitEnvelope), + ["temporal.api.workflowservice.v1.RespondNexusTaskCompletedRequest"] = (payload, visitPayload, visitPayloads, visitEnvelope) => + VisitEnvelopeAsync( + payload, + Visit_temporal_api_workflowservice_v1_RespondNexusTaskCompletedRequest, + visitPayload, + visitPayloads, + visitEnvelope), + ["temporal.api.workflowservice.v1.RespondNexusTaskFailedRequest"] = (payload, visitPayload, visitPayloads, visitEnvelope) => + VisitEnvelopeAsync( + payload, + Visit_temporal_api_workflowservice_v1_RespondNexusTaskFailedRequest, + visitPayload, + visitPayloads, + visitEnvelope), + ["temporal.api.workflowservice.v1.StartActivityExecutionRequest"] = (payload, visitPayload, visitPayloads, visitEnvelope) => + VisitEnvelopeAsync( + payload, + Visit_temporal_api_workflowservice_v1_StartActivityExecutionRequest, + visitPayload, + visitPayloads, + visitEnvelope), + ["temporal.api.workflowservice.v1.StartNexusOperationExecutionRequest"] = (payload, visitPayload, visitPayloads, visitEnvelope) => + VisitEnvelopeAsync( + payload, + Visit_temporal_api_workflowservice_v1_StartNexusOperationExecutionRequest, + visitPayload, + visitPayloads, + visitEnvelope), + ["temporal.api.workflowservice.v1.DescribeActivityExecutionResponse"] = (payload, visitPayload, visitPayloads, visitEnvelope) => + VisitEnvelopeAsync( + payload, + Visit_temporal_api_workflowservice_v1_DescribeActivityExecutionResponse, + visitPayload, + visitPayloads, + visitEnvelope), + ["temporal.api.workflowservice.v1.DescribeNexusOperationExecutionResponse"] = (payload, visitPayload, visitPayloads, visitEnvelope) => + VisitEnvelopeAsync( + payload, + Visit_temporal_api_workflowservice_v1_DescribeNexusOperationExecutionResponse, + visitPayload, + visitPayloads, + visitEnvelope), + ["temporal.api.workflowservice.v1.PollActivityExecutionResponse"] = (payload, visitPayload, visitPayloads, visitEnvelope) => + VisitEnvelopeAsync( + payload, + Visit_temporal_api_workflowservice_v1_PollActivityExecutionResponse, + visitPayload, + visitPayloads, + visitEnvelope), + ["temporal.api.workflowservice.v1.PollNexusOperationExecutionResponse"] = (payload, visitPayload, visitPayloads, visitEnvelope) => + VisitEnvelopeAsync( + payload, + Visit_temporal_api_workflowservice_v1_PollNexusOperationExecutionResponse, + visitPayload, + visitPayloads, + visitEnvelope), + ["temporal.api.workflowservice.v1.CountActivityExecutionsResponse"] = (payload, visitPayload, visitPayloads, visitEnvelope) => + VisitEnvelopeAsync( + payload, + Visit_temporal_api_workflowservice_v1_CountActivityExecutionsResponse, + visitPayload, + visitPayloads, + visitEnvelope), + ["temporal.api.workflowservice.v1.CountNexusOperationExecutionsResponse"] = (payload, visitPayload, visitPayloads, visitEnvelope) => + VisitEnvelopeAsync( payload, - Visit_temporal_api_workflowservice_v1_SignalWithStartWorkflowExecutionResponse, + Visit_temporal_api_workflowservice_v1_CountNexusOperationExecutionsResponse, visitPayload, visitPayloads, visitEnvelope), }; - internal static async Task TryVisitAsync( - Payload payload, + internal static async Task TryVisitAsync( + Payload payload, + PayloadVisitor visitPayload, + PayloadsVisitor visitPayloads, + EnvelopeVisitor? visitEnvelope = null) + { + if (!IsSystemPayload(payload)) + { + return false; + } + + if (payload.Metadata.TryGetValue("messageType", out var messageType) && + EnvelopeVisitors.TryGetValue(messageType.ToStringUtf8(), out var visit)) + { + await visit(payload, visitPayload, visitPayloads, visitEnvelope).ConfigureAwait(false); + } + + return true; + } + + private static async Task Visit_temporal_api_common_v1_Memo( + global::Temporalio.Api.Common.V1.Memo value, + PayloadVisitor visitPayload, + PayloadsVisitor visitPayloads) + { + foreach (var item_temporal_api_common_v1_Memo_1 in value.Fields.Values) + { + if (item_temporal_api_common_v1_Memo_1 != null) + { + await visitPayload(item_temporal_api_common_v1_Memo_1).ConfigureAwait(false); + } + } + } + + private static async Task Visit_temporal_api_common_v1_Header( + global::Temporalio.Api.Common.V1.Header value, + PayloadVisitor visitPayload, + PayloadsVisitor visitPayloads) + { + foreach (var item_temporal_api_common_v1_Header_1 in value.Fields.Values) + { + if (item_temporal_api_common_v1_Header_1 != null) + { + await visitPayload(item_temporal_api_common_v1_Header_1).ConfigureAwait(false); + } + } + } + + private static async Task Visit_temporal_api_failure_v1_ApplicationFailureInfo( + global::Temporalio.Api.Failure.V1.ApplicationFailureInfo value, + PayloadVisitor visitPayload, + PayloadsVisitor visitPayloads) + { + if (value.Details != null) + { + await visitPayloads(value.Details.Payloads_).ConfigureAwait(false); + } + } + + private static async Task Visit_temporal_api_failure_v1_TimeoutFailureInfo( + global::Temporalio.Api.Failure.V1.TimeoutFailureInfo value, + PayloadVisitor visitPayload, + PayloadsVisitor visitPayloads) + { + if (value.LastHeartbeatDetails != null) + { + await visitPayloads(value.LastHeartbeatDetails.Payloads_).ConfigureAwait(false); + } + } + + private static async Task Visit_temporal_api_failure_v1_CanceledFailureInfo( + global::Temporalio.Api.Failure.V1.CanceledFailureInfo value, + PayloadVisitor visitPayload, + PayloadsVisitor visitPayloads) + { + if (value.Details != null) + { + await visitPayloads(value.Details.Payloads_).ConfigureAwait(false); + } + } + + private static async Task Visit_temporal_api_failure_v1_ResetWorkflowFailureInfo( + global::Temporalio.Api.Failure.V1.ResetWorkflowFailureInfo value, + PayloadVisitor visitPayload, + PayloadsVisitor visitPayloads) + { + if (value.LastHeartbeatDetails != null) + { + await visitPayloads(value.LastHeartbeatDetails.Payloads_).ConfigureAwait(false); + } + } + + private static async Task Visit_temporal_api_failure_v1_Failure( + global::Temporalio.Api.Failure.V1.Failure value, + PayloadVisitor visitPayload, + PayloadsVisitor visitPayloads) + { + if (value.EncodedAttributes != null) + { + await visitPayload(value.EncodedAttributes).ConfigureAwait(false); + } + if (value.Cause != null) + { + await Visit_temporal_api_failure_v1_Failure(value.Cause, visitPayload, visitPayloads).ConfigureAwait(false); + } + if (value.ApplicationFailureInfo != null) + { + await Visit_temporal_api_failure_v1_ApplicationFailureInfo(value.ApplicationFailureInfo, visitPayload, visitPayloads).ConfigureAwait(false); + } + if (value.TimeoutFailureInfo != null) + { + await Visit_temporal_api_failure_v1_TimeoutFailureInfo(value.TimeoutFailureInfo, visitPayload, visitPayloads).ConfigureAwait(false); + } + if (value.CanceledFailureInfo != null) + { + await Visit_temporal_api_failure_v1_CanceledFailureInfo(value.CanceledFailureInfo, visitPayload, visitPayloads).ConfigureAwait(false); + } + if (value.ResetWorkflowFailureInfo != null) + { + await Visit_temporal_api_failure_v1_ResetWorkflowFailureInfo(value.ResetWorkflowFailureInfo, visitPayload, visitPayloads).ConfigureAwait(false); + } + } + + private static async Task Visit_temporal_api_sdk_v1_UserMetadata( + global::Temporalio.Api.Sdk.V1.UserMetadata value, + PayloadVisitor visitPayload, + PayloadsVisitor visitPayloads) + { + if (value.Summary != null) + { + await visitPayload(value.Summary).ConfigureAwait(false); + } + if (value.Details != null) + { + await visitPayload(value.Details).ConfigureAwait(false); + } + } + + private static async Task Visit_temporal_api_workflowservice_v1_StartWorkflowExecutionRequest( + global::Temporalio.Api.WorkflowService.V1.StartWorkflowExecutionRequest value, + PayloadVisitor visitPayload, + PayloadsVisitor visitPayloads) + { + if (value.Input != null) + { + await visitPayloads(value.Input.Payloads_).ConfigureAwait(false); + } + if (value.Memo != null) + { + await Visit_temporal_api_common_v1_Memo(value.Memo, visitPayload, visitPayloads).ConfigureAwait(false); + } + if (value.Header != null) + { + await Visit_temporal_api_common_v1_Header(value.Header, visitPayload, visitPayloads).ConfigureAwait(false); + } + if (value.ContinuedFailure != null) + { + await Visit_temporal_api_failure_v1_Failure(value.ContinuedFailure, visitPayload, visitPayloads).ConfigureAwait(false); + } + if (value.LastCompletionResult != null) + { + await visitPayloads(value.LastCompletionResult.Payloads_).ConfigureAwait(false); + } + if (value.UserMetadata != null) + { + await Visit_temporal_api_sdk_v1_UserMetadata(value.UserMetadata, visitPayload, visitPayloads).ConfigureAwait(false); + } + } + + private static async Task Visit_temporal_api_sdk_v1_EventGroupMarker_Label( + global::Temporalio.Api.Sdk.V1.EventGroupMarker.Types.Label value, + PayloadVisitor visitPayload, + PayloadsVisitor visitPayloads) + { + if (value.Label_ != null) + { + await visitPayload(value.Label_).ConfigureAwait(false); + } + } + + private static async Task Visit_temporal_api_sdk_v1_EventGroupMarker( + global::Temporalio.Api.Sdk.V1.EventGroupMarker value, + PayloadVisitor visitPayload, + PayloadsVisitor visitPayloads) + { + if (value.Label != null) + { + await Visit_temporal_api_sdk_v1_EventGroupMarker_Label(value.Label, visitPayload, visitPayloads).ConfigureAwait(false); + } + } + + private static async Task Visit_temporal_api_history_v1_WorkflowExecutionStartedEventAttributes( + global::Temporalio.Api.History.V1.WorkflowExecutionStartedEventAttributes value, + PayloadVisitor visitPayload, + PayloadsVisitor visitPayloads) + { + if (value.Input != null) + { + await visitPayloads(value.Input.Payloads_).ConfigureAwait(false); + } + if (value.ContinuedFailure != null) + { + await Visit_temporal_api_failure_v1_Failure(value.ContinuedFailure, visitPayload, visitPayloads).ConfigureAwait(false); + } + if (value.LastCompletionResult != null) + { + await visitPayloads(value.LastCompletionResult.Payloads_).ConfigureAwait(false); + } + if (value.Memo != null) + { + await Visit_temporal_api_common_v1_Memo(value.Memo, visitPayload, visitPayloads).ConfigureAwait(false); + } + if (value.Header != null) + { + await Visit_temporal_api_common_v1_Header(value.Header, visitPayload, visitPayloads).ConfigureAwait(false); + } + } + + private static async Task Visit_temporal_api_history_v1_WorkflowExecutionCompletedEventAttributes( + global::Temporalio.Api.History.V1.WorkflowExecutionCompletedEventAttributes value, + PayloadVisitor visitPayload, + PayloadsVisitor visitPayloads) + { + if (value.Result != null) + { + await visitPayloads(value.Result.Payloads_).ConfigureAwait(false); + } + } + + private static async Task Visit_temporal_api_history_v1_WorkflowExecutionFailedEventAttributes( + global::Temporalio.Api.History.V1.WorkflowExecutionFailedEventAttributes value, + PayloadVisitor visitPayload, + PayloadsVisitor visitPayloads) + { + if (value.Failure != null) + { + await Visit_temporal_api_failure_v1_Failure(value.Failure, visitPayload, visitPayloads).ConfigureAwait(false); + } + } + + private static async Task Visit_temporal_api_history_v1_WorkflowTaskFailedEventAttributes( + global::Temporalio.Api.History.V1.WorkflowTaskFailedEventAttributes value, + PayloadVisitor visitPayload, + PayloadsVisitor visitPayloads) + { + if (value.Failure != null) + { + await Visit_temporal_api_failure_v1_Failure(value.Failure, visitPayload, visitPayloads).ConfigureAwait(false); + } + } + + private static async Task Visit_temporal_api_history_v1_ActivityTaskScheduledEventAttributes( + global::Temporalio.Api.History.V1.ActivityTaskScheduledEventAttributes value, + PayloadVisitor visitPayload, + PayloadsVisitor visitPayloads) + { + if (value.Header != null) + { + await Visit_temporal_api_common_v1_Header(value.Header, visitPayload, visitPayloads).ConfigureAwait(false); + } + if (value.Input != null) + { + await visitPayloads(value.Input.Payloads_).ConfigureAwait(false); + } + } + + private static async Task Visit_temporal_api_history_v1_ActivityTaskStartedEventAttributes( + global::Temporalio.Api.History.V1.ActivityTaskStartedEventAttributes value, + PayloadVisitor visitPayload, + PayloadsVisitor visitPayloads) + { + if (value.LastFailure != null) + { + await Visit_temporal_api_failure_v1_Failure(value.LastFailure, visitPayload, visitPayloads).ConfigureAwait(false); + } + } + + private static async Task Visit_temporal_api_history_v1_ActivityTaskCompletedEventAttributes( + global::Temporalio.Api.History.V1.ActivityTaskCompletedEventAttributes value, + PayloadVisitor visitPayload, + PayloadsVisitor visitPayloads) + { + if (value.Result != null) + { + await visitPayloads(value.Result.Payloads_).ConfigureAwait(false); + } + } + + private static async Task Visit_temporal_api_history_v1_ActivityTaskFailedEventAttributes( + global::Temporalio.Api.History.V1.ActivityTaskFailedEventAttributes value, + PayloadVisitor visitPayload, + PayloadsVisitor visitPayloads) + { + if (value.Failure != null) + { + await Visit_temporal_api_failure_v1_Failure(value.Failure, visitPayload, visitPayloads).ConfigureAwait(false); + } + } + + private static async Task Visit_temporal_api_history_v1_ActivityTaskTimedOutEventAttributes( + global::Temporalio.Api.History.V1.ActivityTaskTimedOutEventAttributes value, + PayloadVisitor visitPayload, + PayloadsVisitor visitPayloads) + { + if (value.Failure != null) + { + await Visit_temporal_api_failure_v1_Failure(value.Failure, visitPayload, visitPayloads).ConfigureAwait(false); + } + } + + private static async Task Visit_temporal_api_history_v1_ActivityTaskCanceledEventAttributes( + global::Temporalio.Api.History.V1.ActivityTaskCanceledEventAttributes value, + PayloadVisitor visitPayload, + PayloadsVisitor visitPayloads) + { + if (value.Details != null) + { + await visitPayloads(value.Details.Payloads_).ConfigureAwait(false); + } + } + + private static async Task Visit_temporal_api_common_v1_Payloads( + global::Temporalio.Api.Common.V1.Payloads value, + PayloadVisitor visitPayload, + PayloadsVisitor visitPayloads) + { + foreach (var payload_temporal_api_common_v1_Payloads_1 in value.Payloads_) + { + await visitPayload(payload_temporal_api_common_v1_Payloads_1).ConfigureAwait(false); + } + } + + private static async Task Visit_temporal_api_history_v1_MarkerRecordedEventAttributes( + global::Temporalio.Api.History.V1.MarkerRecordedEventAttributes value, + PayloadVisitor visitPayload, + PayloadsVisitor visitPayloads) + { + foreach (var item_temporal_api_history_v1_MarkerRecordedEventAttributes_2 in value.Details.Values) + { + if (item_temporal_api_history_v1_MarkerRecordedEventAttributes_2 != null) + { + await Visit_temporal_api_common_v1_Payloads(item_temporal_api_history_v1_MarkerRecordedEventAttributes_2, visitPayload, visitPayloads).ConfigureAwait(false); + } + } + if (value.Header != null) + { + await Visit_temporal_api_common_v1_Header(value.Header, visitPayload, visitPayloads).ConfigureAwait(false); + } + if (value.Failure != null) + { + await Visit_temporal_api_failure_v1_Failure(value.Failure, visitPayload, visitPayloads).ConfigureAwait(false); + } + } + + private static async Task Visit_temporal_api_history_v1_WorkflowExecutionSignaledEventAttributes( + global::Temporalio.Api.History.V1.WorkflowExecutionSignaledEventAttributes value, + PayloadVisitor visitPayload, + PayloadsVisitor visitPayloads) + { + if (value.Input != null) + { + await visitPayloads(value.Input.Payloads_).ConfigureAwait(false); + } + if (value.Header != null) + { + await Visit_temporal_api_common_v1_Header(value.Header, visitPayload, visitPayloads).ConfigureAwait(false); + } + } + + private static async Task Visit_temporal_api_history_v1_WorkflowExecutionTerminatedEventAttributes( + global::Temporalio.Api.History.V1.WorkflowExecutionTerminatedEventAttributes value, + PayloadVisitor visitPayload, + PayloadsVisitor visitPayloads) + { + if (value.Details != null) + { + await visitPayloads(value.Details.Payloads_).ConfigureAwait(false); + } + } + + private static async Task Visit_temporal_api_history_v1_WorkflowExecutionCanceledEventAttributes( + global::Temporalio.Api.History.V1.WorkflowExecutionCanceledEventAttributes value, + PayloadVisitor visitPayload, + PayloadsVisitor visitPayloads) + { + if (value.Details != null) + { + await visitPayloads(value.Details.Payloads_).ConfigureAwait(false); + } + } + + private static async Task Visit_temporal_api_history_v1_WorkflowExecutionContinuedAsNewEventAttributes( + global::Temporalio.Api.History.V1.WorkflowExecutionContinuedAsNewEventAttributes value, + PayloadVisitor visitPayload, + PayloadsVisitor visitPayloads) + { + if (value.Input != null) + { + await visitPayloads(value.Input.Payloads_).ConfigureAwait(false); + } + if (value.Failure != null) + { + await Visit_temporal_api_failure_v1_Failure(value.Failure, visitPayload, visitPayloads).ConfigureAwait(false); + } + if (value.LastCompletionResult != null) + { + await visitPayloads(value.LastCompletionResult.Payloads_).ConfigureAwait(false); + } + if (value.Header != null) + { + await Visit_temporal_api_common_v1_Header(value.Header, visitPayload, visitPayloads).ConfigureAwait(false); + } + if (value.Memo != null) + { + await Visit_temporal_api_common_v1_Memo(value.Memo, visitPayload, visitPayloads).ConfigureAwait(false); + } + } + + private static async Task Visit_temporal_api_history_v1_StartChildWorkflowExecutionInitiatedEventAttributes( + global::Temporalio.Api.History.V1.StartChildWorkflowExecutionInitiatedEventAttributes value, + PayloadVisitor visitPayload, + PayloadsVisitor visitPayloads) + { + if (value.Input != null) + { + await visitPayloads(value.Input.Payloads_).ConfigureAwait(false); + } + if (value.Header != null) + { + await Visit_temporal_api_common_v1_Header(value.Header, visitPayload, visitPayloads).ConfigureAwait(false); + } + if (value.Memo != null) + { + await Visit_temporal_api_common_v1_Memo(value.Memo, visitPayload, visitPayloads).ConfigureAwait(false); + } + } + + private static async Task Visit_temporal_api_history_v1_ChildWorkflowExecutionStartedEventAttributes( + global::Temporalio.Api.History.V1.ChildWorkflowExecutionStartedEventAttributes value, + PayloadVisitor visitPayload, + PayloadsVisitor visitPayloads) + { + if (value.Header != null) + { + await Visit_temporal_api_common_v1_Header(value.Header, visitPayload, visitPayloads).ConfigureAwait(false); + } + } + + private static async Task Visit_temporal_api_history_v1_ChildWorkflowExecutionCompletedEventAttributes( + global::Temporalio.Api.History.V1.ChildWorkflowExecutionCompletedEventAttributes value, + PayloadVisitor visitPayload, + PayloadsVisitor visitPayloads) + { + if (value.Result != null) + { + await visitPayloads(value.Result.Payloads_).ConfigureAwait(false); + } + } + + private static async Task Visit_temporal_api_history_v1_ChildWorkflowExecutionFailedEventAttributes( + global::Temporalio.Api.History.V1.ChildWorkflowExecutionFailedEventAttributes value, + PayloadVisitor visitPayload, + PayloadsVisitor visitPayloads) + { + if (value.Failure != null) + { + await Visit_temporal_api_failure_v1_Failure(value.Failure, visitPayload, visitPayloads).ConfigureAwait(false); + } + } + + private static async Task Visit_temporal_api_history_v1_ChildWorkflowExecutionCanceledEventAttributes( + global::Temporalio.Api.History.V1.ChildWorkflowExecutionCanceledEventAttributes value, + PayloadVisitor visitPayload, + PayloadsVisitor visitPayloads) + { + if (value.Details != null) + { + await visitPayloads(value.Details.Payloads_).ConfigureAwait(false); + } + } + + private static async Task Visit_temporal_api_history_v1_SignalExternalWorkflowExecutionInitiatedEventAttributes( + global::Temporalio.Api.History.V1.SignalExternalWorkflowExecutionInitiatedEventAttributes value, + PayloadVisitor visitPayload, + PayloadsVisitor visitPayloads) + { + if (value.Input != null) + { + await visitPayloads(value.Input.Payloads_).ConfigureAwait(false); + } + if (value.Header != null) + { + await Visit_temporal_api_common_v1_Header(value.Header, visitPayload, visitPayloads).ConfigureAwait(false); + } + } + + private static async Task Visit_temporal_api_update_v1_Input( + global::Temporalio.Api.Update.V1.Input value, + PayloadVisitor visitPayload, + PayloadsVisitor visitPayloads) + { + if (value.Header != null) + { + await Visit_temporal_api_common_v1_Header(value.Header, visitPayload, visitPayloads).ConfigureAwait(false); + } + if (value.Args != null) + { + await visitPayloads(value.Args.Payloads_).ConfigureAwait(false); + } + } + + private static async Task Visit_temporal_api_update_v1_Request( + global::Temporalio.Api.Update.V1.Request value, + PayloadVisitor visitPayload, + PayloadsVisitor visitPayloads) + { + if (value.Input != null) + { + await Visit_temporal_api_update_v1_Input(value.Input, visitPayload, visitPayloads).ConfigureAwait(false); + } + } + + private static async Task Visit_temporal_api_history_v1_WorkflowExecutionUpdateAcceptedEventAttributes( + global::Temporalio.Api.History.V1.WorkflowExecutionUpdateAcceptedEventAttributes value, + PayloadVisitor visitPayload, + PayloadsVisitor visitPayloads) + { + if (value.AcceptedRequest != null) + { + await Visit_temporal_api_update_v1_Request(value.AcceptedRequest, visitPayload, visitPayloads).ConfigureAwait(false); + } + } + + private static async Task Visit_temporal_api_history_v1_WorkflowExecutionUpdateRejectedEventAttributes( + global::Temporalio.Api.History.V1.WorkflowExecutionUpdateRejectedEventAttributes value, + PayloadVisitor visitPayload, + PayloadsVisitor visitPayloads) + { + if (value.RejectedRequest != null) + { + await Visit_temporal_api_update_v1_Request(value.RejectedRequest, visitPayload, visitPayloads).ConfigureAwait(false); + } + if (value.Failure != null) + { + await Visit_temporal_api_failure_v1_Failure(value.Failure, visitPayload, visitPayloads).ConfigureAwait(false); + } + } + + private static async Task Visit_temporal_api_update_v1_Outcome( + global::Temporalio.Api.Update.V1.Outcome value, + PayloadVisitor visitPayload, + PayloadsVisitor visitPayloads) + { + if (value.Success != null) + { + await visitPayloads(value.Success.Payloads_).ConfigureAwait(false); + } + if (value.Failure != null) + { + await Visit_temporal_api_failure_v1_Failure(value.Failure, visitPayload, visitPayloads).ConfigureAwait(false); + } + } + + private static async Task Visit_temporal_api_history_v1_WorkflowExecutionUpdateCompletedEventAttributes( + global::Temporalio.Api.History.V1.WorkflowExecutionUpdateCompletedEventAttributes value, + PayloadVisitor visitPayload, + PayloadsVisitor visitPayloads) + { + if (value.Outcome != null) + { + await Visit_temporal_api_update_v1_Outcome(value.Outcome, visitPayload, visitPayloads).ConfigureAwait(false); + } + } + + private static async Task Visit_temporal_api_history_v1_WorkflowPropertiesModifiedExternallyEventAttributes( + global::Temporalio.Api.History.V1.WorkflowPropertiesModifiedExternallyEventAttributes value, + PayloadVisitor visitPayload, + PayloadsVisitor visitPayloads) + { + if (value.UpsertedMemo != null) + { + await Visit_temporal_api_common_v1_Memo(value.UpsertedMemo, visitPayload, visitPayloads).ConfigureAwait(false); + } + } + + private static async Task Visit_temporal_api_history_v1_WorkflowPropertiesModifiedEventAttributes( + global::Temporalio.Api.History.V1.WorkflowPropertiesModifiedEventAttributes value, + PayloadVisitor visitPayload, + PayloadsVisitor visitPayloads) + { + if (value.UpsertedMemo != null) + { + await Visit_temporal_api_common_v1_Memo(value.UpsertedMemo, visitPayload, visitPayloads).ConfigureAwait(false); + } + } + + private static async Task Visit_temporal_api_history_v1_WorkflowExecutionUpdateAdmittedEventAttributes( + global::Temporalio.Api.History.V1.WorkflowExecutionUpdateAdmittedEventAttributes value, + PayloadVisitor visitPayload, + PayloadsVisitor visitPayloads) + { + if (value.Request != null) + { + await Visit_temporal_api_update_v1_Request(value.Request, visitPayload, visitPayloads).ConfigureAwait(false); + } + } + + private static async Task Visit_temporal_api_history_v1_NexusOperationScheduledEventAttributes( + global::Temporalio.Api.History.V1.NexusOperationScheduledEventAttributes value, + PayloadVisitor visitPayload, + PayloadsVisitor visitPayloads) + { + if (value.Input != null) + { + await visitPayload(value.Input).ConfigureAwait(false); + } + } + + private static async Task Visit_temporal_api_history_v1_NexusOperationCompletedEventAttributes( + global::Temporalio.Api.History.V1.NexusOperationCompletedEventAttributes value, + PayloadVisitor visitPayload, + PayloadsVisitor visitPayloads) + { + if (value.Result != null) + { + await visitPayload(value.Result).ConfigureAwait(false); + } + } + + private static async Task Visit_temporal_api_history_v1_NexusOperationFailedEventAttributes( + global::Temporalio.Api.History.V1.NexusOperationFailedEventAttributes value, + PayloadVisitor visitPayload, + PayloadsVisitor visitPayloads) + { + if (value.Failure != null) + { + await Visit_temporal_api_failure_v1_Failure(value.Failure, visitPayload, visitPayloads).ConfigureAwait(false); + } + } + + private static async Task Visit_temporal_api_history_v1_NexusOperationCanceledEventAttributes( + global::Temporalio.Api.History.V1.NexusOperationCanceledEventAttributes value, + PayloadVisitor visitPayload, + PayloadsVisitor visitPayloads) + { + if (value.Failure != null) + { + await Visit_temporal_api_failure_v1_Failure(value.Failure, visitPayload, visitPayloads).ConfigureAwait(false); + } + } + + private static async Task Visit_temporal_api_history_v1_NexusOperationTimedOutEventAttributes( + global::Temporalio.Api.History.V1.NexusOperationTimedOutEventAttributes value, + PayloadVisitor visitPayload, + PayloadsVisitor visitPayloads) + { + if (value.Failure != null) + { + await Visit_temporal_api_failure_v1_Failure(value.Failure, visitPayload, visitPayloads).ConfigureAwait(false); + } + } + + private static async Task Visit_temporal_api_history_v1_NexusOperationCancelRequestFailedEventAttributes( + global::Temporalio.Api.History.V1.NexusOperationCancelRequestFailedEventAttributes value, + PayloadVisitor visitPayload, + PayloadsVisitor visitPayloads) + { + if (value.Failure != null) + { + await Visit_temporal_api_failure_v1_Failure(value.Failure, visitPayload, visitPayloads).ConfigureAwait(false); + } + } + + private static async Task Visit_temporal_api_history_v1_HistoryEvent( + global::Temporalio.Api.History.V1.HistoryEvent value, + PayloadVisitor visitPayload, + PayloadsVisitor visitPayloads) + { + if (value.UserMetadata != null) + { + await Visit_temporal_api_sdk_v1_UserMetadata(value.UserMetadata, visitPayload, visitPayloads).ConfigureAwait(false); + } + foreach (var item_temporal_api_history_v1_HistoryEvent_304 in value.EventGroupMarkers) + { + await Visit_temporal_api_sdk_v1_EventGroupMarker(item_temporal_api_history_v1_HistoryEvent_304, visitPayload, visitPayloads).ConfigureAwait(false); + } + if (value.WorkflowExecutionStartedEventAttributes != null) + { + await Visit_temporal_api_history_v1_WorkflowExecutionStartedEventAttributes(value.WorkflowExecutionStartedEventAttributes, visitPayload, visitPayloads).ConfigureAwait(false); + } + if (value.WorkflowExecutionCompletedEventAttributes != null) + { + await Visit_temporal_api_history_v1_WorkflowExecutionCompletedEventAttributes(value.WorkflowExecutionCompletedEventAttributes, visitPayload, visitPayloads).ConfigureAwait(false); + } + if (value.WorkflowExecutionFailedEventAttributes != null) + { + await Visit_temporal_api_history_v1_WorkflowExecutionFailedEventAttributes(value.WorkflowExecutionFailedEventAttributes, visitPayload, visitPayloads).ConfigureAwait(false); + } + if (value.WorkflowTaskFailedEventAttributes != null) + { + await Visit_temporal_api_history_v1_WorkflowTaskFailedEventAttributes(value.WorkflowTaskFailedEventAttributes, visitPayload, visitPayloads).ConfigureAwait(false); + } + if (value.ActivityTaskScheduledEventAttributes != null) + { + await Visit_temporal_api_history_v1_ActivityTaskScheduledEventAttributes(value.ActivityTaskScheduledEventAttributes, visitPayload, visitPayloads).ConfigureAwait(false); + } + if (value.ActivityTaskStartedEventAttributes != null) + { + await Visit_temporal_api_history_v1_ActivityTaskStartedEventAttributes(value.ActivityTaskStartedEventAttributes, visitPayload, visitPayloads).ConfigureAwait(false); + } + if (value.ActivityTaskCompletedEventAttributes != null) + { + await Visit_temporal_api_history_v1_ActivityTaskCompletedEventAttributes(value.ActivityTaskCompletedEventAttributes, visitPayload, visitPayloads).ConfigureAwait(false); + } + if (value.ActivityTaskFailedEventAttributes != null) + { + await Visit_temporal_api_history_v1_ActivityTaskFailedEventAttributes(value.ActivityTaskFailedEventAttributes, visitPayload, visitPayloads).ConfigureAwait(false); + } + if (value.ActivityTaskTimedOutEventAttributes != null) + { + await Visit_temporal_api_history_v1_ActivityTaskTimedOutEventAttributes(value.ActivityTaskTimedOutEventAttributes, visitPayload, visitPayloads).ConfigureAwait(false); + } + if (value.ActivityTaskCanceledEventAttributes != null) + { + await Visit_temporal_api_history_v1_ActivityTaskCanceledEventAttributes(value.ActivityTaskCanceledEventAttributes, visitPayload, visitPayloads).ConfigureAwait(false); + } + if (value.MarkerRecordedEventAttributes != null) + { + await Visit_temporal_api_history_v1_MarkerRecordedEventAttributes(value.MarkerRecordedEventAttributes, visitPayload, visitPayloads).ConfigureAwait(false); + } + if (value.WorkflowExecutionSignaledEventAttributes != null) + { + await Visit_temporal_api_history_v1_WorkflowExecutionSignaledEventAttributes(value.WorkflowExecutionSignaledEventAttributes, visitPayload, visitPayloads).ConfigureAwait(false); + } + if (value.WorkflowExecutionTerminatedEventAttributes != null) + { + await Visit_temporal_api_history_v1_WorkflowExecutionTerminatedEventAttributes(value.WorkflowExecutionTerminatedEventAttributes, visitPayload, visitPayloads).ConfigureAwait(false); + } + if (value.WorkflowExecutionCanceledEventAttributes != null) + { + await Visit_temporal_api_history_v1_WorkflowExecutionCanceledEventAttributes(value.WorkflowExecutionCanceledEventAttributes, visitPayload, visitPayloads).ConfigureAwait(false); + } + if (value.WorkflowExecutionContinuedAsNewEventAttributes != null) + { + await Visit_temporal_api_history_v1_WorkflowExecutionContinuedAsNewEventAttributes(value.WorkflowExecutionContinuedAsNewEventAttributes, visitPayload, visitPayloads).ConfigureAwait(false); + } + if (value.StartChildWorkflowExecutionInitiatedEventAttributes != null) + { + await Visit_temporal_api_history_v1_StartChildWorkflowExecutionInitiatedEventAttributes(value.StartChildWorkflowExecutionInitiatedEventAttributes, visitPayload, visitPayloads).ConfigureAwait(false); + } + if (value.ChildWorkflowExecutionStartedEventAttributes != null) + { + await Visit_temporal_api_history_v1_ChildWorkflowExecutionStartedEventAttributes(value.ChildWorkflowExecutionStartedEventAttributes, visitPayload, visitPayloads).ConfigureAwait(false); + } + if (value.ChildWorkflowExecutionCompletedEventAttributes != null) + { + await Visit_temporal_api_history_v1_ChildWorkflowExecutionCompletedEventAttributes(value.ChildWorkflowExecutionCompletedEventAttributes, visitPayload, visitPayloads).ConfigureAwait(false); + } + if (value.ChildWorkflowExecutionFailedEventAttributes != null) + { + await Visit_temporal_api_history_v1_ChildWorkflowExecutionFailedEventAttributes(value.ChildWorkflowExecutionFailedEventAttributes, visitPayload, visitPayloads).ConfigureAwait(false); + } + if (value.ChildWorkflowExecutionCanceledEventAttributes != null) + { + await Visit_temporal_api_history_v1_ChildWorkflowExecutionCanceledEventAttributes(value.ChildWorkflowExecutionCanceledEventAttributes, visitPayload, visitPayloads).ConfigureAwait(false); + } + if (value.SignalExternalWorkflowExecutionInitiatedEventAttributes != null) + { + await Visit_temporal_api_history_v1_SignalExternalWorkflowExecutionInitiatedEventAttributes(value.SignalExternalWorkflowExecutionInitiatedEventAttributes, visitPayload, visitPayloads).ConfigureAwait(false); + } + if (value.WorkflowExecutionUpdateAcceptedEventAttributes != null) + { + await Visit_temporal_api_history_v1_WorkflowExecutionUpdateAcceptedEventAttributes(value.WorkflowExecutionUpdateAcceptedEventAttributes, visitPayload, visitPayloads).ConfigureAwait(false); + } + if (value.WorkflowExecutionUpdateRejectedEventAttributes != null) + { + await Visit_temporal_api_history_v1_WorkflowExecutionUpdateRejectedEventAttributes(value.WorkflowExecutionUpdateRejectedEventAttributes, visitPayload, visitPayloads).ConfigureAwait(false); + } + if (value.WorkflowExecutionUpdateCompletedEventAttributes != null) + { + await Visit_temporal_api_history_v1_WorkflowExecutionUpdateCompletedEventAttributes(value.WorkflowExecutionUpdateCompletedEventAttributes, visitPayload, visitPayloads).ConfigureAwait(false); + } + if (value.WorkflowPropertiesModifiedExternallyEventAttributes != null) + { + await Visit_temporal_api_history_v1_WorkflowPropertiesModifiedExternallyEventAttributes(value.WorkflowPropertiesModifiedExternallyEventAttributes, visitPayload, visitPayloads).ConfigureAwait(false); + } + if (value.WorkflowPropertiesModifiedEventAttributes != null) + { + await Visit_temporal_api_history_v1_WorkflowPropertiesModifiedEventAttributes(value.WorkflowPropertiesModifiedEventAttributes, visitPayload, visitPayloads).ConfigureAwait(false); + } + if (value.WorkflowExecutionUpdateAdmittedEventAttributes != null) + { + await Visit_temporal_api_history_v1_WorkflowExecutionUpdateAdmittedEventAttributes(value.WorkflowExecutionUpdateAdmittedEventAttributes, visitPayload, visitPayloads).ConfigureAwait(false); + } + if (value.NexusOperationScheduledEventAttributes != null) + { + await Visit_temporal_api_history_v1_NexusOperationScheduledEventAttributes(value.NexusOperationScheduledEventAttributes, visitPayload, visitPayloads).ConfigureAwait(false); + } + if (value.NexusOperationCompletedEventAttributes != null) + { + await Visit_temporal_api_history_v1_NexusOperationCompletedEventAttributes(value.NexusOperationCompletedEventAttributes, visitPayload, visitPayloads).ConfigureAwait(false); + } + if (value.NexusOperationFailedEventAttributes != null) + { + await Visit_temporal_api_history_v1_NexusOperationFailedEventAttributes(value.NexusOperationFailedEventAttributes, visitPayload, visitPayloads).ConfigureAwait(false); + } + if (value.NexusOperationCanceledEventAttributes != null) + { + await Visit_temporal_api_history_v1_NexusOperationCanceledEventAttributes(value.NexusOperationCanceledEventAttributes, visitPayload, visitPayloads).ConfigureAwait(false); + } + if (value.NexusOperationTimedOutEventAttributes != null) + { + await Visit_temporal_api_history_v1_NexusOperationTimedOutEventAttributes(value.NexusOperationTimedOutEventAttributes, visitPayload, visitPayloads).ConfigureAwait(false); + } + if (value.NexusOperationCancelRequestFailedEventAttributes != null) + { + await Visit_temporal_api_history_v1_NexusOperationCancelRequestFailedEventAttributes(value.NexusOperationCancelRequestFailedEventAttributes, visitPayload, visitPayloads).ConfigureAwait(false); + } + } + + private static async Task Visit_temporal_api_history_v1_History( + global::Temporalio.Api.History.V1.History value, + PayloadVisitor visitPayload, + PayloadsVisitor visitPayloads) + { + foreach (var item_temporal_api_history_v1_History_1 in value.Events) + { + await Visit_temporal_api_history_v1_HistoryEvent(item_temporal_api_history_v1_History_1, visitPayload, visitPayloads).ConfigureAwait(false); + } + } + + private static async Task Visit_temporal_api_query_v1_WorkflowQuery( + global::Temporalio.Api.Query.V1.WorkflowQuery value, + PayloadVisitor visitPayload, + PayloadsVisitor visitPayloads) + { + if (value.QueryArgs != null) + { + await visitPayloads(value.QueryArgs.Payloads_).ConfigureAwait(false); + } + if (value.Header != null) + { + await Visit_temporal_api_common_v1_Header(value.Header, visitPayload, visitPayloads).ConfigureAwait(false); + } + } + + private static async Task Visit_temporal_api_workflowservice_v1_PollWorkflowTaskQueueResponse( + global::Temporalio.Api.WorkflowService.V1.PollWorkflowTaskQueueResponse value, + PayloadVisitor visitPayload, + PayloadsVisitor visitPayloads) + { + if (value.History != null) + { + await Visit_temporal_api_history_v1_History(value.History, visitPayload, visitPayloads).ConfigureAwait(false); + } + if (value.Query != null) + { + await Visit_temporal_api_query_v1_WorkflowQuery(value.Query, visitPayload, visitPayloads).ConfigureAwait(false); + } + foreach (var item_temporal_api_workflowservice_v1_PollWorkflowTaskQueueResponse_14 in value.Queries.Values) + { + if (item_temporal_api_workflowservice_v1_PollWorkflowTaskQueueResponse_14 != null) + { + await Visit_temporal_api_query_v1_WorkflowQuery(item_temporal_api_workflowservice_v1_PollWorkflowTaskQueueResponse_14, visitPayload, visitPayloads).ConfigureAwait(false); + } + } + } + + private static async Task Visit_temporal_api_workflowservice_v1_StartWorkflowExecutionResponse( + global::Temporalio.Api.WorkflowService.V1.StartWorkflowExecutionResponse value, + PayloadVisitor visitPayload, + PayloadsVisitor visitPayloads) + { + if (value.EagerWorkflowTask != null) + { + await Visit_temporal_api_workflowservice_v1_PollWorkflowTaskQueueResponse(value.EagerWorkflowTask, visitPayload, visitPayloads).ConfigureAwait(false); + } + } + + private static async Task Visit_temporal_api_workflowservice_v1_UpdateWorkflowExecutionRequest( + global::Temporalio.Api.WorkflowService.V1.UpdateWorkflowExecutionRequest value, + PayloadVisitor visitPayload, + PayloadsVisitor visitPayloads) + { + if (value.Request != null) + { + await Visit_temporal_api_update_v1_Request(value.Request, visitPayload, visitPayloads).ConfigureAwait(false); + } + } + + private static async Task Visit_temporal_api_workflowservice_v1_ExecuteMultiOperationRequest_Operation( + global::Temporalio.Api.WorkflowService.V1.ExecuteMultiOperationRequest.Types.Operation value, + PayloadVisitor visitPayload, + PayloadsVisitor visitPayloads) + { + if (value.StartWorkflow != null) + { + await Visit_temporal_api_workflowservice_v1_StartWorkflowExecutionRequest(value.StartWorkflow, visitPayload, visitPayloads).ConfigureAwait(false); + } + if (value.UpdateWorkflow != null) + { + await Visit_temporal_api_workflowservice_v1_UpdateWorkflowExecutionRequest(value.UpdateWorkflow, visitPayload, visitPayloads).ConfigureAwait(false); + } + } + + private static async Task Visit_temporal_api_workflowservice_v1_ExecuteMultiOperationRequest( + global::Temporalio.Api.WorkflowService.V1.ExecuteMultiOperationRequest value, + PayloadVisitor visitPayload, + PayloadsVisitor visitPayloads) + { + foreach (var item_temporal_api_workflowservice_v1_ExecuteMultiOperationRequest_2 in value.Operations) + { + await Visit_temporal_api_workflowservice_v1_ExecuteMultiOperationRequest_Operation(item_temporal_api_workflowservice_v1_ExecuteMultiOperationRequest_2, visitPayload, visitPayloads).ConfigureAwait(false); + } + } + + private static async Task Visit_temporal_api_workflowservice_v1_UpdateWorkflowExecutionResponse( + global::Temporalio.Api.WorkflowService.V1.UpdateWorkflowExecutionResponse value, + PayloadVisitor visitPayload, + PayloadsVisitor visitPayloads) + { + if (value.Outcome != null) + { + await Visit_temporal_api_update_v1_Outcome(value.Outcome, visitPayload, visitPayloads).ConfigureAwait(false); + } + } + + private static async Task Visit_temporal_api_workflowservice_v1_ExecuteMultiOperationResponse_Response( + global::Temporalio.Api.WorkflowService.V1.ExecuteMultiOperationResponse.Types.Response value, + PayloadVisitor visitPayload, + PayloadsVisitor visitPayloads) + { + if (value.StartWorkflow != null) + { + await Visit_temporal_api_workflowservice_v1_StartWorkflowExecutionResponse(value.StartWorkflow, visitPayload, visitPayloads).ConfigureAwait(false); + } + if (value.UpdateWorkflow != null) + { + await Visit_temporal_api_workflowservice_v1_UpdateWorkflowExecutionResponse(value.UpdateWorkflow, visitPayload, visitPayloads).ConfigureAwait(false); + } + } + + private static async Task Visit_temporal_api_workflowservice_v1_ExecuteMultiOperationResponse( + global::Temporalio.Api.WorkflowService.V1.ExecuteMultiOperationResponse value, + PayloadVisitor visitPayload, + PayloadsVisitor visitPayloads) + { + foreach (var item_temporal_api_workflowservice_v1_ExecuteMultiOperationResponse_1 in value.Responses) + { + await Visit_temporal_api_workflowservice_v1_ExecuteMultiOperationResponse_Response(item_temporal_api_workflowservice_v1_ExecuteMultiOperationResponse_1, visitPayload, visitPayloads).ConfigureAwait(false); + } + } + + private static async Task Visit_temporal_api_workflowservice_v1_GetWorkflowExecutionHistoryResponse( + global::Temporalio.Api.WorkflowService.V1.GetWorkflowExecutionHistoryResponse value, + PayloadVisitor visitPayload, + PayloadsVisitor visitPayloads) + { + if (value.History != null) + { + await Visit_temporal_api_history_v1_History(value.History, visitPayload, visitPayloads).ConfigureAwait(false); + } + } + + private static async Task Visit_temporal_api_workflowservice_v1_GetWorkflowExecutionHistoryReverseResponse( + global::Temporalio.Api.WorkflowService.V1.GetWorkflowExecutionHistoryReverseResponse value, + PayloadVisitor visitPayload, + PayloadsVisitor visitPayloads) + { + if (value.History != null) + { + await Visit_temporal_api_history_v1_History(value.History, visitPayload, visitPayloads).ConfigureAwait(false); + } + } + + private static async Task Visit_temporal_api_command_v1_ScheduleActivityTaskCommandAttributes( + global::Temporalio.Api.Command.V1.ScheduleActivityTaskCommandAttributes value, + PayloadVisitor visitPayload, + PayloadsVisitor visitPayloads) + { + if (value.Header != null) + { + await Visit_temporal_api_common_v1_Header(value.Header, visitPayload, visitPayloads).ConfigureAwait(false); + } + if (value.Input != null) + { + await visitPayloads(value.Input.Payloads_).ConfigureAwait(false); + } + } + + private static async Task Visit_temporal_api_command_v1_CompleteWorkflowExecutionCommandAttributes( + global::Temporalio.Api.Command.V1.CompleteWorkflowExecutionCommandAttributes value, + PayloadVisitor visitPayload, + PayloadsVisitor visitPayloads) + { + if (value.Result != null) + { + await visitPayloads(value.Result.Payloads_).ConfigureAwait(false); + } + } + + private static async Task Visit_temporal_api_command_v1_FailWorkflowExecutionCommandAttributes( + global::Temporalio.Api.Command.V1.FailWorkflowExecutionCommandAttributes value, + PayloadVisitor visitPayload, + PayloadsVisitor visitPayloads) + { + if (value.Failure != null) + { + await Visit_temporal_api_failure_v1_Failure(value.Failure, visitPayload, visitPayloads).ConfigureAwait(false); + } + } + + private static async Task Visit_temporal_api_command_v1_CancelWorkflowExecutionCommandAttributes( + global::Temporalio.Api.Command.V1.CancelWorkflowExecutionCommandAttributes value, + PayloadVisitor visitPayload, + PayloadsVisitor visitPayloads) + { + if (value.Details != null) + { + await visitPayloads(value.Details.Payloads_).ConfigureAwait(false); + } + } + + private static async Task Visit_temporal_api_command_v1_RecordMarkerCommandAttributes( + global::Temporalio.Api.Command.V1.RecordMarkerCommandAttributes value, + PayloadVisitor visitPayload, + PayloadsVisitor visitPayloads) + { + foreach (var item_temporal_api_command_v1_RecordMarkerCommandAttributes_2 in value.Details.Values) + { + if (item_temporal_api_command_v1_RecordMarkerCommandAttributes_2 != null) + { + await Visit_temporal_api_common_v1_Payloads(item_temporal_api_command_v1_RecordMarkerCommandAttributes_2, visitPayload, visitPayloads).ConfigureAwait(false); + } + } + if (value.Header != null) + { + await Visit_temporal_api_common_v1_Header(value.Header, visitPayload, visitPayloads).ConfigureAwait(false); + } + if (value.Failure != null) + { + await Visit_temporal_api_failure_v1_Failure(value.Failure, visitPayload, visitPayloads).ConfigureAwait(false); + } + } + + private static async Task Visit_temporal_api_command_v1_ContinueAsNewWorkflowExecutionCommandAttributes( + global::Temporalio.Api.Command.V1.ContinueAsNewWorkflowExecutionCommandAttributes value, + PayloadVisitor visitPayload, + PayloadsVisitor visitPayloads) + { + if (value.Input != null) + { + await visitPayloads(value.Input.Payloads_).ConfigureAwait(false); + } + if (value.Failure != null) + { + await Visit_temporal_api_failure_v1_Failure(value.Failure, visitPayload, visitPayloads).ConfigureAwait(false); + } + if (value.LastCompletionResult != null) + { + await visitPayloads(value.LastCompletionResult.Payloads_).ConfigureAwait(false); + } + if (value.Header != null) + { + await Visit_temporal_api_common_v1_Header(value.Header, visitPayload, visitPayloads).ConfigureAwait(false); + } + if (value.Memo != null) + { + await Visit_temporal_api_common_v1_Memo(value.Memo, visitPayload, visitPayloads).ConfigureAwait(false); + } + } + + private static async Task Visit_temporal_api_command_v1_StartChildWorkflowExecutionCommandAttributes( + global::Temporalio.Api.Command.V1.StartChildWorkflowExecutionCommandAttributes value, + PayloadVisitor visitPayload, + PayloadsVisitor visitPayloads) + { + if (value.Input != null) + { + await visitPayloads(value.Input.Payloads_).ConfigureAwait(false); + } + if (value.Header != null) + { + await Visit_temporal_api_common_v1_Header(value.Header, visitPayload, visitPayloads).ConfigureAwait(false); + } + if (value.Memo != null) + { + await Visit_temporal_api_common_v1_Memo(value.Memo, visitPayload, visitPayloads).ConfigureAwait(false); + } + } + + private static async Task Visit_temporal_api_command_v1_SignalExternalWorkflowExecutionCommandAttributes( + global::Temporalio.Api.Command.V1.SignalExternalWorkflowExecutionCommandAttributes value, + PayloadVisitor visitPayload, + PayloadsVisitor visitPayloads) + { + if (value.Input != null) + { + await visitPayloads(value.Input.Payloads_).ConfigureAwait(false); + } + if (value.Header != null) + { + await Visit_temporal_api_common_v1_Header(value.Header, visitPayload, visitPayloads).ConfigureAwait(false); + } + } + + private static async Task Visit_temporal_api_command_v1_ModifyWorkflowPropertiesCommandAttributes( + global::Temporalio.Api.Command.V1.ModifyWorkflowPropertiesCommandAttributes value, + PayloadVisitor visitPayload, + PayloadsVisitor visitPayloads) + { + if (value.UpsertedMemo != null) + { + await Visit_temporal_api_common_v1_Memo(value.UpsertedMemo, visitPayload, visitPayloads).ConfigureAwait(false); + } + } + + private static async Task Visit_temporal_api_command_v1_ScheduleNexusOperationCommandAttributes( + global::Temporalio.Api.Command.V1.ScheduleNexusOperationCommandAttributes value, + PayloadVisitor visitPayload, + PayloadsVisitor visitPayloads) + { + if (value.Input != null) + { + await visitPayload(value.Input).ConfigureAwait(false); + } + } + + private static async Task Visit_temporal_api_command_v1_Command( + global::Temporalio.Api.Command.V1.Command value, + PayloadVisitor visitPayload, + PayloadsVisitor visitPayloads) + { + if (value.UserMetadata != null) + { + await Visit_temporal_api_sdk_v1_UserMetadata(value.UserMetadata, visitPayload, visitPayloads).ConfigureAwait(false); + } + foreach (var item_temporal_api_command_v1_Command_302 in value.EventGroupMarkers) + { + await Visit_temporal_api_sdk_v1_EventGroupMarker(item_temporal_api_command_v1_Command_302, visitPayload, visitPayloads).ConfigureAwait(false); + } + if (value.ScheduleActivityTaskCommandAttributes != null) + { + await Visit_temporal_api_command_v1_ScheduleActivityTaskCommandAttributes(value.ScheduleActivityTaskCommandAttributes, visitPayload, visitPayloads).ConfigureAwait(false); + } + if (value.CompleteWorkflowExecutionCommandAttributes != null) + { + await Visit_temporal_api_command_v1_CompleteWorkflowExecutionCommandAttributes(value.CompleteWorkflowExecutionCommandAttributes, visitPayload, visitPayloads).ConfigureAwait(false); + } + if (value.FailWorkflowExecutionCommandAttributes != null) + { + await Visit_temporal_api_command_v1_FailWorkflowExecutionCommandAttributes(value.FailWorkflowExecutionCommandAttributes, visitPayload, visitPayloads).ConfigureAwait(false); + } + if (value.CancelWorkflowExecutionCommandAttributes != null) + { + await Visit_temporal_api_command_v1_CancelWorkflowExecutionCommandAttributes(value.CancelWorkflowExecutionCommandAttributes, visitPayload, visitPayloads).ConfigureAwait(false); + } + if (value.RecordMarkerCommandAttributes != null) + { + await Visit_temporal_api_command_v1_RecordMarkerCommandAttributes(value.RecordMarkerCommandAttributes, visitPayload, visitPayloads).ConfigureAwait(false); + } + if (value.ContinueAsNewWorkflowExecutionCommandAttributes != null) + { + await Visit_temporal_api_command_v1_ContinueAsNewWorkflowExecutionCommandAttributes(value.ContinueAsNewWorkflowExecutionCommandAttributes, visitPayload, visitPayloads).ConfigureAwait(false); + } + if (value.StartChildWorkflowExecutionCommandAttributes != null) + { + await Visit_temporal_api_command_v1_StartChildWorkflowExecutionCommandAttributes(value.StartChildWorkflowExecutionCommandAttributes, visitPayload, visitPayloads).ConfigureAwait(false); + } + if (value.SignalExternalWorkflowExecutionCommandAttributes != null) + { + await Visit_temporal_api_command_v1_SignalExternalWorkflowExecutionCommandAttributes(value.SignalExternalWorkflowExecutionCommandAttributes, visitPayload, visitPayloads).ConfigureAwait(false); + } + if (value.ModifyWorkflowPropertiesCommandAttributes != null) + { + await Visit_temporal_api_command_v1_ModifyWorkflowPropertiesCommandAttributes(value.ModifyWorkflowPropertiesCommandAttributes, visitPayload, visitPayloads).ConfigureAwait(false); + } + if (value.ScheduleNexusOperationCommandAttributes != null) + { + await Visit_temporal_api_command_v1_ScheduleNexusOperationCommandAttributes(value.ScheduleNexusOperationCommandAttributes, visitPayload, visitPayloads).ConfigureAwait(false); + } + } + + private static async Task Visit_temporal_api_query_v1_WorkflowQueryResult( + global::Temporalio.Api.Query.V1.WorkflowQueryResult value, + PayloadVisitor visitPayload, + PayloadsVisitor visitPayloads) + { + if (value.Answer != null) + { + await visitPayloads(value.Answer.Payloads_).ConfigureAwait(false); + } + if (value.Failure != null) + { + await Visit_temporal_api_failure_v1_Failure(value.Failure, visitPayload, visitPayloads).ConfigureAwait(false); + } + } + + private static async Task Visit_temporal_api_workflowservice_v1_RespondWorkflowTaskCompletedRequest( + global::Temporalio.Api.WorkflowService.V1.RespondWorkflowTaskCompletedRequest value, + PayloadVisitor visitPayload, + PayloadsVisitor visitPayloads) + { + foreach (var item_temporal_api_workflowservice_v1_RespondWorkflowTaskCompletedRequest_2 in value.Commands) + { + await Visit_temporal_api_command_v1_Command(item_temporal_api_workflowservice_v1_RespondWorkflowTaskCompletedRequest_2, visitPayload, visitPayloads).ConfigureAwait(false); + } + foreach (var item_temporal_api_workflowservice_v1_RespondWorkflowTaskCompletedRequest_8 in value.QueryResults.Values) + { + if (item_temporal_api_workflowservice_v1_RespondWorkflowTaskCompletedRequest_8 != null) + { + await Visit_temporal_api_query_v1_WorkflowQueryResult(item_temporal_api_workflowservice_v1_RespondWorkflowTaskCompletedRequest_8, visitPayload, visitPayloads).ConfigureAwait(false); + } + } + } + + private static async Task Visit_temporal_api_workflowservice_v1_PollActivityTaskQueueResponse( + global::Temporalio.Api.WorkflowService.V1.PollActivityTaskQueueResponse value, + PayloadVisitor visitPayload, + PayloadsVisitor visitPayloads) + { + if (value.Header != null) + { + await Visit_temporal_api_common_v1_Header(value.Header, visitPayload, visitPayloads).ConfigureAwait(false); + } + if (value.Input != null) + { + await visitPayloads(value.Input.Payloads_).ConfigureAwait(false); + } + if (value.HeartbeatDetails != null) + { + await visitPayloads(value.HeartbeatDetails.Payloads_).ConfigureAwait(false); + } + } + + private static async Task Visit_temporal_api_workflowservice_v1_RespondWorkflowTaskCompletedResponse( + global::Temporalio.Api.WorkflowService.V1.RespondWorkflowTaskCompletedResponse value, + PayloadVisitor visitPayload, + PayloadsVisitor visitPayloads) + { + if (value.WorkflowTask != null) + { + await Visit_temporal_api_workflowservice_v1_PollWorkflowTaskQueueResponse(value.WorkflowTask, visitPayload, visitPayloads).ConfigureAwait(false); + } + foreach (var item_temporal_api_workflowservice_v1_RespondWorkflowTaskCompletedResponse_2 in value.ActivityTasks) + { + await Visit_temporal_api_workflowservice_v1_PollActivityTaskQueueResponse(item_temporal_api_workflowservice_v1_RespondWorkflowTaskCompletedResponse_2, visitPayload, visitPayloads).ConfigureAwait(false); + } + } + + private static async Task Visit_temporal_api_workflowservice_v1_RespondWorkflowTaskFailedRequest( + global::Temporalio.Api.WorkflowService.V1.RespondWorkflowTaskFailedRequest value, + PayloadVisitor visitPayload, + PayloadsVisitor visitPayloads) + { + if (value.Failure != null) + { + await Visit_temporal_api_failure_v1_Failure(value.Failure, visitPayload, visitPayloads).ConfigureAwait(false); + } + } + + private static async Task Visit_temporal_api_workflowservice_v1_RecordActivityTaskHeartbeatRequest( + global::Temporalio.Api.WorkflowService.V1.RecordActivityTaskHeartbeatRequest value, + PayloadVisitor visitPayload, + PayloadsVisitor visitPayloads) + { + if (value.Details != null) + { + await visitPayloads(value.Details.Payloads_).ConfigureAwait(false); + } + } + + private static async Task Visit_temporal_api_workflowservice_v1_RecordActivityTaskHeartbeatByIdRequest( + global::Temporalio.Api.WorkflowService.V1.RecordActivityTaskHeartbeatByIdRequest value, + PayloadVisitor visitPayload, + PayloadsVisitor visitPayloads) + { + if (value.Details != null) + { + await visitPayloads(value.Details.Payloads_).ConfigureAwait(false); + } + } + + private static async Task Visit_temporal_api_workflowservice_v1_RespondActivityTaskCompletedRequest( + global::Temporalio.Api.WorkflowService.V1.RespondActivityTaskCompletedRequest value, + PayloadVisitor visitPayload, + PayloadsVisitor visitPayloads) + { + if (value.Result != null) + { + await visitPayloads(value.Result.Payloads_).ConfigureAwait(false); + } + } + + private static async Task Visit_temporal_api_workflowservice_v1_RespondActivityTaskCompletedByIdRequest( + global::Temporalio.Api.WorkflowService.V1.RespondActivityTaskCompletedByIdRequest value, + PayloadVisitor visitPayload, + PayloadsVisitor visitPayloads) + { + if (value.Result != null) + { + await visitPayloads(value.Result.Payloads_).ConfigureAwait(false); + } + } + + private static async Task Visit_temporal_api_workflowservice_v1_RespondActivityTaskFailedRequest( + global::Temporalio.Api.WorkflowService.V1.RespondActivityTaskFailedRequest value, + PayloadVisitor visitPayload, + PayloadsVisitor visitPayloads) + { + if (value.Failure != null) + { + await Visit_temporal_api_failure_v1_Failure(value.Failure, visitPayload, visitPayloads).ConfigureAwait(false); + } + if (value.LastHeartbeatDetails != null) + { + await visitPayloads(value.LastHeartbeatDetails.Payloads_).ConfigureAwait(false); + } + } + + private static async Task Visit_temporal_api_workflowservice_v1_RespondActivityTaskFailedResponse( + global::Temporalio.Api.WorkflowService.V1.RespondActivityTaskFailedResponse value, + PayloadVisitor visitPayload, + PayloadsVisitor visitPayloads) + { + foreach (var item_temporal_api_workflowservice_v1_RespondActivityTaskFailedResponse_1 in value.Failures) + { + await Visit_temporal_api_failure_v1_Failure(item_temporal_api_workflowservice_v1_RespondActivityTaskFailedResponse_1, visitPayload, visitPayloads).ConfigureAwait(false); + } + } + + private static async Task Visit_temporal_api_workflowservice_v1_RespondActivityTaskFailedByIdRequest( + global::Temporalio.Api.WorkflowService.V1.RespondActivityTaskFailedByIdRequest value, + PayloadVisitor visitPayload, + PayloadsVisitor visitPayloads) + { + if (value.Failure != null) + { + await Visit_temporal_api_failure_v1_Failure(value.Failure, visitPayload, visitPayloads).ConfigureAwait(false); + } + if (value.LastHeartbeatDetails != null) + { + await visitPayloads(value.LastHeartbeatDetails.Payloads_).ConfigureAwait(false); + } + } + + private static async Task Visit_temporal_api_workflowservice_v1_RespondActivityTaskFailedByIdResponse( + global::Temporalio.Api.WorkflowService.V1.RespondActivityTaskFailedByIdResponse value, + PayloadVisitor visitPayload, + PayloadsVisitor visitPayloads) + { + foreach (var item_temporal_api_workflowservice_v1_RespondActivityTaskFailedByIdResponse_1 in value.Failures) + { + await Visit_temporal_api_failure_v1_Failure(item_temporal_api_workflowservice_v1_RespondActivityTaskFailedByIdResponse_1, visitPayload, visitPayloads).ConfigureAwait(false); + } + } + + private static async Task Visit_temporal_api_workflowservice_v1_RespondActivityTaskCanceledRequest( + global::Temporalio.Api.WorkflowService.V1.RespondActivityTaskCanceledRequest value, + PayloadVisitor visitPayload, + PayloadsVisitor visitPayloads) + { + if (value.Details != null) + { + await visitPayloads(value.Details.Payloads_).ConfigureAwait(false); + } + } + + private static async Task Visit_temporal_api_workflowservice_v1_RespondActivityTaskCanceledByIdRequest( + global::Temporalio.Api.WorkflowService.V1.RespondActivityTaskCanceledByIdRequest value, + PayloadVisitor visitPayload, + PayloadsVisitor visitPayloads) + { + if (value.Details != null) + { + await visitPayloads(value.Details.Payloads_).ConfigureAwait(false); + } + } + + private static async Task Visit_temporal_api_workflowservice_v1_SignalWorkflowExecutionRequest( + global::Temporalio.Api.WorkflowService.V1.SignalWorkflowExecutionRequest value, + PayloadVisitor visitPayload, + PayloadsVisitor visitPayloads) + { + if (value.Input != null) + { + await visitPayloads(value.Input.Payloads_).ConfigureAwait(false); + } + if (value.Header != null) + { + await Visit_temporal_api_common_v1_Header(value.Header, visitPayload, visitPayloads).ConfigureAwait(false); + } + } + + private static async Task Visit_temporal_api_workflowservice_v1_SignalWithStartWorkflowExecutionRequest( + global::Temporalio.Api.WorkflowService.V1.SignalWithStartWorkflowExecutionRequest value, + PayloadVisitor visitPayload, + PayloadsVisitor visitPayloads) + { + if (value.Input != null) + { + await visitPayloads(value.Input.Payloads_).ConfigureAwait(false); + } + if (value.SignalInput != null) + { + await visitPayloads(value.SignalInput.Payloads_).ConfigureAwait(false); + } + if (value.Memo != null) + { + await Visit_temporal_api_common_v1_Memo(value.Memo, visitPayload, visitPayloads).ConfigureAwait(false); + } + if (value.Header != null) + { + await Visit_temporal_api_common_v1_Header(value.Header, visitPayload, visitPayloads).ConfigureAwait(false); + } + if (value.UserMetadata != null) + { + await Visit_temporal_api_sdk_v1_UserMetadata(value.UserMetadata, visitPayload, visitPayloads).ConfigureAwait(false); + } + } + + private static async Task Visit_temporal_api_workflow_v1_PostResetOperation_SignalWorkflow( + global::Temporalio.Api.Workflow.V1.PostResetOperation.Types.SignalWorkflow value, + PayloadVisitor visitPayload, + PayloadsVisitor visitPayloads) + { + if (value.Input != null) + { + await visitPayloads(value.Input.Payloads_).ConfigureAwait(false); + } + if (value.Header != null) + { + await Visit_temporal_api_common_v1_Header(value.Header, visitPayload, visitPayloads).ConfigureAwait(false); + } + } + + private static async Task Visit_temporal_api_workflow_v1_PostResetOperation( + global::Temporalio.Api.Workflow.V1.PostResetOperation value, + PayloadVisitor visitPayload, + PayloadsVisitor visitPayloads) + { + if (value.SignalWorkflow != null) + { + await Visit_temporal_api_workflow_v1_PostResetOperation_SignalWorkflow(value.SignalWorkflow, visitPayload, visitPayloads).ConfigureAwait(false); + } + } + + private static async Task Visit_temporal_api_workflowservice_v1_ResetWorkflowExecutionRequest( + global::Temporalio.Api.WorkflowService.V1.ResetWorkflowExecutionRequest value, + PayloadVisitor visitPayload, + PayloadsVisitor visitPayloads) + { + foreach (var item_temporal_api_workflowservice_v1_ResetWorkflowExecutionRequest_8 in value.PostResetOperations) + { + await Visit_temporal_api_workflow_v1_PostResetOperation(item_temporal_api_workflowservice_v1_ResetWorkflowExecutionRequest_8, visitPayload, visitPayloads).ConfigureAwait(false); + } + } + + private static async Task Visit_temporal_api_workflowservice_v1_TerminateWorkflowExecutionRequest( + global::Temporalio.Api.WorkflowService.V1.TerminateWorkflowExecutionRequest value, + PayloadVisitor visitPayload, + PayloadsVisitor visitPayloads) + { + if (value.Details != null) + { + await visitPayloads(value.Details.Payloads_).ConfigureAwait(false); + } + } + + private static async Task Visit_temporal_api_workflow_v1_WorkflowExecutionInfo( + global::Temporalio.Api.Workflow.V1.WorkflowExecutionInfo value, + PayloadVisitor visitPayload, + PayloadsVisitor visitPayloads) + { + if (value.Memo != null) + { + await Visit_temporal_api_common_v1_Memo(value.Memo, visitPayload, visitPayloads).ConfigureAwait(false); + } + } + + private static async Task Visit_temporal_api_workflowservice_v1_ListOpenWorkflowExecutionsResponse( + global::Temporalio.Api.WorkflowService.V1.ListOpenWorkflowExecutionsResponse value, + PayloadVisitor visitPayload, + PayloadsVisitor visitPayloads) + { + foreach (var item_temporal_api_workflowservice_v1_ListOpenWorkflowExecutionsResponse_1 in value.Executions) + { + await Visit_temporal_api_workflow_v1_WorkflowExecutionInfo(item_temporal_api_workflowservice_v1_ListOpenWorkflowExecutionsResponse_1, visitPayload, visitPayloads).ConfigureAwait(false); + } + } + + private static async Task Visit_temporal_api_workflowservice_v1_ListClosedWorkflowExecutionsResponse( + global::Temporalio.Api.WorkflowService.V1.ListClosedWorkflowExecutionsResponse value, + PayloadVisitor visitPayload, + PayloadsVisitor visitPayloads) + { + foreach (var item_temporal_api_workflowservice_v1_ListClosedWorkflowExecutionsResponse_1 in value.Executions) + { + await Visit_temporal_api_workflow_v1_WorkflowExecutionInfo(item_temporal_api_workflowservice_v1_ListClosedWorkflowExecutionsResponse_1, visitPayload, visitPayloads).ConfigureAwait(false); + } + } + + private static async Task Visit_temporal_api_workflowservice_v1_ListWorkflowExecutionsResponse( + global::Temporalio.Api.WorkflowService.V1.ListWorkflowExecutionsResponse value, + PayloadVisitor visitPayload, + PayloadsVisitor visitPayloads) + { + foreach (var item_temporal_api_workflowservice_v1_ListWorkflowExecutionsResponse_1 in value.Executions) + { + await Visit_temporal_api_workflow_v1_WorkflowExecutionInfo(item_temporal_api_workflowservice_v1_ListWorkflowExecutionsResponse_1, visitPayload, visitPayloads).ConfigureAwait(false); + } + } + + private static async Task Visit_temporal_api_workflowservice_v1_ListArchivedWorkflowExecutionsResponse( + global::Temporalio.Api.WorkflowService.V1.ListArchivedWorkflowExecutionsResponse value, + PayloadVisitor visitPayload, + PayloadsVisitor visitPayloads) + { + foreach (var item_temporal_api_workflowservice_v1_ListArchivedWorkflowExecutionsResponse_1 in value.Executions) + { + await Visit_temporal_api_workflow_v1_WorkflowExecutionInfo(item_temporal_api_workflowservice_v1_ListArchivedWorkflowExecutionsResponse_1, visitPayload, visitPayloads).ConfigureAwait(false); + } + } + + private static async Task Visit_temporal_api_workflowservice_v1_ScanWorkflowExecutionsResponse( + global::Temporalio.Api.WorkflowService.V1.ScanWorkflowExecutionsResponse value, + PayloadVisitor visitPayload, + PayloadsVisitor visitPayloads) + { + foreach (var item_temporal_api_workflowservice_v1_ScanWorkflowExecutionsResponse_1 in value.Executions) + { + await Visit_temporal_api_workflow_v1_WorkflowExecutionInfo(item_temporal_api_workflowservice_v1_ScanWorkflowExecutionsResponse_1, visitPayload, visitPayloads).ConfigureAwait(false); + } + } + + private static async Task Visit_temporal_api_workflowservice_v1_CountWorkflowExecutionsResponse_AggregationGroup( + global::Temporalio.Api.WorkflowService.V1.CountWorkflowExecutionsResponse.Types.AggregationGroup value, + PayloadVisitor visitPayload, + PayloadsVisitor visitPayloads) + { + foreach (var payload_temporal_api_workflowservice_v1_CountWorkflowExecutionsResponse_AggregationGroup_1 in value.GroupValues) + { + await visitPayload(payload_temporal_api_workflowservice_v1_CountWorkflowExecutionsResponse_AggregationGroup_1).ConfigureAwait(false); + } + } + + private static async Task Visit_temporal_api_workflowservice_v1_CountWorkflowExecutionsResponse( + global::Temporalio.Api.WorkflowService.V1.CountWorkflowExecutionsResponse value, + PayloadVisitor visitPayload, + PayloadsVisitor visitPayloads) + { + foreach (var item_temporal_api_workflowservice_v1_CountWorkflowExecutionsResponse_2 in value.Groups) + { + await Visit_temporal_api_workflowservice_v1_CountWorkflowExecutionsResponse_AggregationGroup(item_temporal_api_workflowservice_v1_CountWorkflowExecutionsResponse_2, visitPayload, visitPayloads).ConfigureAwait(false); + } + } + + private static async Task Visit_temporal_api_workflowservice_v1_RespondQueryTaskCompletedRequest( + global::Temporalio.Api.WorkflowService.V1.RespondQueryTaskCompletedRequest value, + PayloadVisitor visitPayload, + PayloadsVisitor visitPayloads) + { + if (value.QueryResult != null) + { + await visitPayloads(value.QueryResult.Payloads_).ConfigureAwait(false); + } + if (value.Failure != null) + { + await Visit_temporal_api_failure_v1_Failure(value.Failure, visitPayload, visitPayloads).ConfigureAwait(false); + } + } + + private static async Task Visit_temporal_api_workflowservice_v1_QueryWorkflowRequest( + global::Temporalio.Api.WorkflowService.V1.QueryWorkflowRequest value, + PayloadVisitor visitPayload, + PayloadsVisitor visitPayloads) + { + if (value.Query != null) + { + await Visit_temporal_api_query_v1_WorkflowQuery(value.Query, visitPayload, visitPayloads).ConfigureAwait(false); + } + } + + private static async Task Visit_temporal_api_workflowservice_v1_QueryWorkflowResponse( + global::Temporalio.Api.WorkflowService.V1.QueryWorkflowResponse value, + PayloadVisitor visitPayload, + PayloadsVisitor visitPayloads) + { + if (value.QueryResult != null) + { + await visitPayloads(value.QueryResult.Payloads_).ConfigureAwait(false); + } + } + + private static async Task Visit_temporal_api_workflow_v1_WorkflowExecutionConfig( + global::Temporalio.Api.Workflow.V1.WorkflowExecutionConfig value, + PayloadVisitor visitPayload, + PayloadsVisitor visitPayloads) + { + if (value.UserMetadata != null) + { + await Visit_temporal_api_sdk_v1_UserMetadata(value.UserMetadata, visitPayload, visitPayloads).ConfigureAwait(false); + } + } + + private static async Task Visit_temporal_api_workflow_v1_PendingActivityInfo( + global::Temporalio.Api.Workflow.V1.PendingActivityInfo value, + PayloadVisitor visitPayload, + PayloadsVisitor visitPayloads) + { + if (value.HeartbeatDetails != null) + { + await visitPayloads(value.HeartbeatDetails.Payloads_).ConfigureAwait(false); + } + if (value.LastFailure != null) + { + await Visit_temporal_api_failure_v1_Failure(value.LastFailure, visitPayload, visitPayloads).ConfigureAwait(false); + } + } + + private static async Task Visit_temporal_api_workflow_v1_CallbackInfo( + global::Temporalio.Api.Workflow.V1.CallbackInfo value, + PayloadVisitor visitPayload, + PayloadsVisitor visitPayloads) + { + if (value.LastAttemptFailure != null) + { + await Visit_temporal_api_failure_v1_Failure(value.LastAttemptFailure, visitPayload, visitPayloads).ConfigureAwait(false); + } + } + + private static async Task Visit_temporal_api_workflow_v1_NexusOperationCancellationInfo( + global::Temporalio.Api.Workflow.V1.NexusOperationCancellationInfo value, + PayloadVisitor visitPayload, + PayloadsVisitor visitPayloads) + { + if (value.LastAttemptFailure != null) + { + await Visit_temporal_api_failure_v1_Failure(value.LastAttemptFailure, visitPayload, visitPayloads).ConfigureAwait(false); + } + } + + private static async Task Visit_temporal_api_workflow_v1_PendingNexusOperationInfo( + global::Temporalio.Api.Workflow.V1.PendingNexusOperationInfo value, + PayloadVisitor visitPayload, + PayloadsVisitor visitPayloads) + { + if (value.LastAttemptFailure != null) + { + await Visit_temporal_api_failure_v1_Failure(value.LastAttemptFailure, visitPayload, visitPayloads).ConfigureAwait(false); + } + if (value.CancellationInfo != null) + { + await Visit_temporal_api_workflow_v1_NexusOperationCancellationInfo(value.CancellationInfo, visitPayload, visitPayloads).ConfigureAwait(false); + } + } + + private static async Task Visit_temporal_api_workflowservice_v1_DescribeWorkflowExecutionResponse( + global::Temporalio.Api.WorkflowService.V1.DescribeWorkflowExecutionResponse value, + PayloadVisitor visitPayload, + PayloadsVisitor visitPayloads) + { + if (value.ExecutionConfig != null) + { + await Visit_temporal_api_workflow_v1_WorkflowExecutionConfig(value.ExecutionConfig, visitPayload, visitPayloads).ConfigureAwait(false); + } + if (value.WorkflowExecutionInfo != null) + { + await Visit_temporal_api_workflow_v1_WorkflowExecutionInfo(value.WorkflowExecutionInfo, visitPayload, visitPayloads).ConfigureAwait(false); + } + foreach (var item_temporal_api_workflowservice_v1_DescribeWorkflowExecutionResponse_3 in value.PendingActivities) + { + await Visit_temporal_api_workflow_v1_PendingActivityInfo(item_temporal_api_workflowservice_v1_DescribeWorkflowExecutionResponse_3, visitPayload, visitPayloads).ConfigureAwait(false); + } + foreach (var item_temporal_api_workflowservice_v1_DescribeWorkflowExecutionResponse_6 in value.Callbacks) + { + await Visit_temporal_api_workflow_v1_CallbackInfo(item_temporal_api_workflowservice_v1_DescribeWorkflowExecutionResponse_6, visitPayload, visitPayloads).ConfigureAwait(false); + } + foreach (var item_temporal_api_workflowservice_v1_DescribeWorkflowExecutionResponse_7 in value.PendingNexusOperations) + { + await Visit_temporal_api_workflow_v1_PendingNexusOperationInfo(item_temporal_api_workflowservice_v1_DescribeWorkflowExecutionResponse_7, visitPayload, visitPayloads).ConfigureAwait(false); + } + } + + private static async Task Visit_temporal_api_workflow_v1_NewWorkflowExecutionInfo( + global::Temporalio.Api.Workflow.V1.NewWorkflowExecutionInfo value, + PayloadVisitor visitPayload, + PayloadsVisitor visitPayloads) + { + if (value.Input != null) + { + await visitPayloads(value.Input.Payloads_).ConfigureAwait(false); + } + if (value.Memo != null) + { + await Visit_temporal_api_common_v1_Memo(value.Memo, visitPayload, visitPayloads).ConfigureAwait(false); + } + if (value.Header != null) + { + await Visit_temporal_api_common_v1_Header(value.Header, visitPayload, visitPayloads).ConfigureAwait(false); + } + if (value.UserMetadata != null) + { + await Visit_temporal_api_sdk_v1_UserMetadata(value.UserMetadata, visitPayload, visitPayloads).ConfigureAwait(false); + } + } + + private static async Task Visit_temporal_api_schedule_v1_ScheduleAction( + global::Temporalio.Api.Schedule.V1.ScheduleAction value, + PayloadVisitor visitPayload, + PayloadsVisitor visitPayloads) + { + if (value.StartWorkflow != null) + { + await Visit_temporal_api_workflow_v1_NewWorkflowExecutionInfo(value.StartWorkflow, visitPayload, visitPayloads).ConfigureAwait(false); + } + } + + private static async Task Visit_temporal_api_schedule_v1_Schedule( + global::Temporalio.Api.Schedule.V1.Schedule value, + PayloadVisitor visitPayload, + PayloadsVisitor visitPayloads) + { + if (value.Action != null) + { + await Visit_temporal_api_schedule_v1_ScheduleAction(value.Action, visitPayload, visitPayloads).ConfigureAwait(false); + } + } + + private static async Task Visit_temporal_api_workflowservice_v1_CreateScheduleRequest( + global::Temporalio.Api.WorkflowService.V1.CreateScheduleRequest value, + PayloadVisitor visitPayload, + PayloadsVisitor visitPayloads) + { + if (value.Schedule != null) + { + await Visit_temporal_api_schedule_v1_Schedule(value.Schedule, visitPayload, visitPayloads).ConfigureAwait(false); + } + if (value.Memo != null) + { + await Visit_temporal_api_common_v1_Memo(value.Memo, visitPayload, visitPayloads).ConfigureAwait(false); + } + } + + private static async Task Visit_temporal_api_workflowservice_v1_DescribeScheduleResponse( + global::Temporalio.Api.WorkflowService.V1.DescribeScheduleResponse value, + PayloadVisitor visitPayload, + PayloadsVisitor visitPayloads) + { + if (value.Schedule != null) + { + await Visit_temporal_api_schedule_v1_Schedule(value.Schedule, visitPayload, visitPayloads).ConfigureAwait(false); + } + if (value.Memo != null) + { + await Visit_temporal_api_common_v1_Memo(value.Memo, visitPayload, visitPayloads).ConfigureAwait(false); + } + } + + private static async Task Visit_temporal_api_workflowservice_v1_UpdateScheduleRequest( + global::Temporalio.Api.WorkflowService.V1.UpdateScheduleRequest value, + PayloadVisitor visitPayload, + PayloadsVisitor visitPayloads) + { + if (value.Schedule != null) + { + await Visit_temporal_api_schedule_v1_Schedule(value.Schedule, visitPayload, visitPayloads).ConfigureAwait(false); + } + if (value.Memo != null) + { + await Visit_temporal_api_common_v1_Memo(value.Memo, visitPayload, visitPayloads).ConfigureAwait(false); + } + } + + private static async Task Visit_temporal_api_schedule_v1_ScheduleListEntry( + global::Temporalio.Api.Schedule.V1.ScheduleListEntry value, + PayloadVisitor visitPayload, + PayloadsVisitor visitPayloads) + { + if (value.Memo != null) + { + await Visit_temporal_api_common_v1_Memo(value.Memo, visitPayload, visitPayloads).ConfigureAwait(false); + } + } + + private static async Task Visit_temporal_api_workflowservice_v1_ListSchedulesResponse( + global::Temporalio.Api.WorkflowService.V1.ListSchedulesResponse value, + PayloadVisitor visitPayload, + PayloadsVisitor visitPayloads) + { + foreach (var item_temporal_api_workflowservice_v1_ListSchedulesResponse_1 in value.Schedules) + { + await Visit_temporal_api_schedule_v1_ScheduleListEntry(item_temporal_api_workflowservice_v1_ListSchedulesResponse_1, visitPayload, visitPayloads).ConfigureAwait(false); + } + } + + private static async Task Visit_temporal_api_workflowservice_v1_CountSchedulesResponse_AggregationGroup( + global::Temporalio.Api.WorkflowService.V1.CountSchedulesResponse.Types.AggregationGroup value, + PayloadVisitor visitPayload, + PayloadsVisitor visitPayloads) + { + foreach (var payload_temporal_api_workflowservice_v1_CountSchedulesResponse_AggregationGroup_1 in value.GroupValues) + { + await visitPayload(payload_temporal_api_workflowservice_v1_CountSchedulesResponse_AggregationGroup_1).ConfigureAwait(false); + } + } + + private static async Task Visit_temporal_api_workflowservice_v1_CountSchedulesResponse( + global::Temporalio.Api.WorkflowService.V1.CountSchedulesResponse value, + PayloadVisitor visitPayload, + PayloadsVisitor visitPayloads) + { + foreach (var item_temporal_api_workflowservice_v1_CountSchedulesResponse_2 in value.Groups) + { + await Visit_temporal_api_workflowservice_v1_CountSchedulesResponse_AggregationGroup(item_temporal_api_workflowservice_v1_CountSchedulesResponse_2, visitPayload, visitPayloads).ConfigureAwait(false); + } + } + + private static async Task Visit_temporal_api_deployment_v1_DeploymentInfo( + global::Temporalio.Api.Deployment.V1.DeploymentInfo value, + PayloadVisitor visitPayload, + PayloadsVisitor visitPayloads) + { + foreach (var item_temporal_api_deployment_v1_DeploymentInfo_4 in value.Metadata.Values) + { + if (item_temporal_api_deployment_v1_DeploymentInfo_4 != null) + { + await visitPayload(item_temporal_api_deployment_v1_DeploymentInfo_4).ConfigureAwait(false); + } + } + } + + private static async Task Visit_temporal_api_workflowservice_v1_DescribeDeploymentResponse( + global::Temporalio.Api.WorkflowService.V1.DescribeDeploymentResponse value, + PayloadVisitor visitPayload, + PayloadsVisitor visitPayloads) + { + if (value.DeploymentInfo != null) + { + await Visit_temporal_api_deployment_v1_DeploymentInfo(value.DeploymentInfo, visitPayload, visitPayloads).ConfigureAwait(false); + } + } + + private static async Task Visit_temporal_api_deployment_v1_VersionMetadata( + global::Temporalio.Api.Deployment.V1.VersionMetadata value, + PayloadVisitor visitPayload, + PayloadsVisitor visitPayloads) + { + foreach (var item_temporal_api_deployment_v1_VersionMetadata_1 in value.Entries.Values) + { + if (item_temporal_api_deployment_v1_VersionMetadata_1 != null) + { + await visitPayload(item_temporal_api_deployment_v1_VersionMetadata_1).ConfigureAwait(false); + } + } + } + + private static async Task Visit_temporal_api_compute_v1_ComputeProvider( + global::Temporalio.Api.Compute.V1.ComputeProvider value, + PayloadVisitor visitPayload, + PayloadsVisitor visitPayloads) + { + if (value.Details != null) + { + await visitPayload(value.Details).ConfigureAwait(false); + } + } + + private static async Task Visit_temporal_api_compute_v1_ComputeScaler( + global::Temporalio.Api.Compute.V1.ComputeScaler value, + PayloadVisitor visitPayload, + PayloadsVisitor visitPayloads) + { + if (value.Details != null) + { + await visitPayload(value.Details).ConfigureAwait(false); + } + } + + private static async Task Visit_temporal_api_compute_v1_ComputeConfigScalingGroup( + global::Temporalio.Api.Compute.V1.ComputeConfigScalingGroup value, + PayloadVisitor visitPayload, + PayloadsVisitor visitPayloads) + { + if (value.Provider != null) + { + await Visit_temporal_api_compute_v1_ComputeProvider(value.Provider, visitPayload, visitPayloads).ConfigureAwait(false); + } + if (value.Scaler != null) + { + await Visit_temporal_api_compute_v1_ComputeScaler(value.Scaler, visitPayload, visitPayloads).ConfigureAwait(false); + } + } + + private static async Task Visit_temporal_api_compute_v1_ComputeConfig( + global::Temporalio.Api.Compute.V1.ComputeConfig value, + PayloadVisitor visitPayload, + PayloadsVisitor visitPayloads) + { + foreach (var item_temporal_api_compute_v1_ComputeConfig_1 in value.ScalingGroups.Values) + { + if (item_temporal_api_compute_v1_ComputeConfig_1 != null) + { + await Visit_temporal_api_compute_v1_ComputeConfigScalingGroup(item_temporal_api_compute_v1_ComputeConfig_1, visitPayload, visitPayloads).ConfigureAwait(false); + } + } + } + + private static async Task Visit_temporal_api_deployment_v1_WorkerDeploymentVersionInfo( + global::Temporalio.Api.Deployment.V1.WorkerDeploymentVersionInfo value, + PayloadVisitor visitPayload, + PayloadsVisitor visitPayloads) + { + if (value.Metadata != null) + { + await Visit_temporal_api_deployment_v1_VersionMetadata(value.Metadata, visitPayload, visitPayloads).ConfigureAwait(false); + } + if (value.ComputeConfig != null) + { + await Visit_temporal_api_compute_v1_ComputeConfig(value.ComputeConfig, visitPayload, visitPayloads).ConfigureAwait(false); + } + } + + private static async Task Visit_temporal_api_workflowservice_v1_DescribeWorkerDeploymentVersionResponse( + global::Temporalio.Api.WorkflowService.V1.DescribeWorkerDeploymentVersionResponse value, + PayloadVisitor visitPayload, + PayloadsVisitor visitPayloads) + { + if (value.WorkerDeploymentVersionInfo != null) + { + await Visit_temporal_api_deployment_v1_WorkerDeploymentVersionInfo(value.WorkerDeploymentVersionInfo, visitPayload, visitPayloads).ConfigureAwait(false); + } + } + + private static async Task Visit_temporal_api_workflowservice_v1_GetDeploymentReachabilityResponse( + global::Temporalio.Api.WorkflowService.V1.GetDeploymentReachabilityResponse value, + PayloadVisitor visitPayload, + PayloadsVisitor visitPayloads) + { + if (value.DeploymentInfo != null) + { + await Visit_temporal_api_deployment_v1_DeploymentInfo(value.DeploymentInfo, visitPayload, visitPayloads).ConfigureAwait(false); + } + } + + private static async Task Visit_temporal_api_workflowservice_v1_GetCurrentDeploymentResponse( + global::Temporalio.Api.WorkflowService.V1.GetCurrentDeploymentResponse value, + PayloadVisitor visitPayload, + PayloadsVisitor visitPayloads) + { + if (value.CurrentDeploymentInfo != null) + { + await Visit_temporal_api_deployment_v1_DeploymentInfo(value.CurrentDeploymentInfo, visitPayload, visitPayloads).ConfigureAwait(false); + } + } + + private static async Task Visit_temporal_api_deployment_v1_UpdateDeploymentMetadata( + global::Temporalio.Api.Deployment.V1.UpdateDeploymentMetadata value, + PayloadVisitor visitPayload, + PayloadsVisitor visitPayloads) + { + foreach (var item_temporal_api_deployment_v1_UpdateDeploymentMetadata_1 in value.UpsertEntries.Values) + { + if (item_temporal_api_deployment_v1_UpdateDeploymentMetadata_1 != null) + { + await visitPayload(item_temporal_api_deployment_v1_UpdateDeploymentMetadata_1).ConfigureAwait(false); + } + } + } + + private static async Task Visit_temporal_api_workflowservice_v1_SetCurrentDeploymentRequest( + global::Temporalio.Api.WorkflowService.V1.SetCurrentDeploymentRequest value, + PayloadVisitor visitPayload, + PayloadsVisitor visitPayloads) + { + if (value.UpdateMetadata != null) + { + await Visit_temporal_api_deployment_v1_UpdateDeploymentMetadata(value.UpdateMetadata, visitPayload, visitPayloads).ConfigureAwait(false); + } + } + + private static async Task Visit_temporal_api_workflowservice_v1_SetCurrentDeploymentResponse( + global::Temporalio.Api.WorkflowService.V1.SetCurrentDeploymentResponse value, + PayloadVisitor visitPayload, + PayloadsVisitor visitPayloads) + { + if (value.CurrentDeploymentInfo != null) + { + await Visit_temporal_api_deployment_v1_DeploymentInfo(value.CurrentDeploymentInfo, visitPayload, visitPayloads).ConfigureAwait(false); + } + if (value.PreviousDeploymentInfo != null) + { + await Visit_temporal_api_deployment_v1_DeploymentInfo(value.PreviousDeploymentInfo, visitPayload, visitPayloads).ConfigureAwait(false); + } + } + + private static async Task Visit_temporal_api_workflowservice_v1_CreateWorkerDeploymentVersionRequest( + global::Temporalio.Api.WorkflowService.V1.CreateWorkerDeploymentVersionRequest value, + PayloadVisitor visitPayload, + PayloadsVisitor visitPayloads) + { + if (value.ComputeConfig != null) + { + await Visit_temporal_api_compute_v1_ComputeConfig(value.ComputeConfig, visitPayload, visitPayloads).ConfigureAwait(false); + } + } + + private static async Task Visit_temporal_api_compute_v1_ComputeConfigScalingGroupUpdate( + global::Temporalio.Api.Compute.V1.ComputeConfigScalingGroupUpdate value, + PayloadVisitor visitPayload, + PayloadsVisitor visitPayloads) + { + if (value.ScalingGroup != null) + { + await Visit_temporal_api_compute_v1_ComputeConfigScalingGroup(value.ScalingGroup, visitPayload, visitPayloads).ConfigureAwait(false); + } + } + + private static async Task Visit_temporal_api_workflowservice_v1_UpdateWorkerDeploymentVersionComputeConfigRequest( + global::Temporalio.Api.WorkflowService.V1.UpdateWorkerDeploymentVersionComputeConfigRequest value, + PayloadVisitor visitPayload, + PayloadsVisitor visitPayloads) + { + foreach (var item_temporal_api_workflowservice_v1_UpdateWorkerDeploymentVersionComputeConfigRequest_6 in value.ComputeConfigScalingGroups.Values) + { + if (item_temporal_api_workflowservice_v1_UpdateWorkerDeploymentVersionComputeConfigRequest_6 != null) + { + await Visit_temporal_api_compute_v1_ComputeConfigScalingGroupUpdate(item_temporal_api_workflowservice_v1_UpdateWorkerDeploymentVersionComputeConfigRequest_6, visitPayload, visitPayloads).ConfigureAwait(false); + } + } + } + + private static async Task Visit_temporal_api_workflowservice_v1_ValidateWorkerDeploymentVersionComputeConfigRequest( + global::Temporalio.Api.WorkflowService.V1.ValidateWorkerDeploymentVersionComputeConfigRequest value, + PayloadVisitor visitPayload, + PayloadsVisitor visitPayloads) + { + foreach (var item_temporal_api_workflowservice_v1_ValidateWorkerDeploymentVersionComputeConfigRequest_6 in value.ComputeConfigScalingGroups.Values) + { + if (item_temporal_api_workflowservice_v1_ValidateWorkerDeploymentVersionComputeConfigRequest_6 != null) + { + await Visit_temporal_api_compute_v1_ComputeConfigScalingGroupUpdate(item_temporal_api_workflowservice_v1_ValidateWorkerDeploymentVersionComputeConfigRequest_6, visitPayload, visitPayloads).ConfigureAwait(false); + } + } + } + + private static async Task Visit_temporal_api_workflowservice_v1_UpdateWorkerDeploymentVersionMetadataRequest( + global::Temporalio.Api.WorkflowService.V1.UpdateWorkerDeploymentVersionMetadataRequest value, + PayloadVisitor visitPayload, + PayloadsVisitor visitPayloads) + { + foreach (var item_temporal_api_workflowservice_v1_UpdateWorkerDeploymentVersionMetadataRequest_3 in value.UpsertEntries.Values) + { + if (item_temporal_api_workflowservice_v1_UpdateWorkerDeploymentVersionMetadataRequest_3 != null) + { + await visitPayload(item_temporal_api_workflowservice_v1_UpdateWorkerDeploymentVersionMetadataRequest_3).ConfigureAwait(false); + } + } + } + + private static async Task Visit_temporal_api_workflowservice_v1_UpdateWorkerDeploymentVersionMetadataResponse( + global::Temporalio.Api.WorkflowService.V1.UpdateWorkerDeploymentVersionMetadataResponse value, PayloadVisitor visitPayload, - PayloadsVisitor visitPayloads, - EnvelopeVisitor? visitEnvelope = null) + PayloadsVisitor visitPayloads) { - if (!IsSystemPayload(payload)) + if (value.Metadata != null) { - return false; + await Visit_temporal_api_deployment_v1_VersionMetadata(value.Metadata, visitPayload, visitPayloads).ConfigureAwait(false); } + } - if (!payload.Metadata.TryGetValue("messageType", out var messageType) || - !EnvelopeVisitors.TryGetValue(messageType.ToStringUtf8(), out var visit)) + private static async Task Visit_temporal_api_workflowservice_v1_PollWorkflowExecutionUpdateResponse( + global::Temporalio.Api.WorkflowService.V1.PollWorkflowExecutionUpdateResponse value, + PayloadVisitor visitPayload, + PayloadsVisitor visitPayloads) + { + if (value.Outcome != null) { - return false; + await Visit_temporal_api_update_v1_Outcome(value.Outcome, visitPayload, visitPayloads).ConfigureAwait(false); } + } - await visit(payload, visitPayload, visitPayloads, visitEnvelope).ConfigureAwait(false); - return true; + private static async Task Visit_temporal_api_batch_v1_BatchOperationTermination( + global::Temporalio.Api.Batch.V1.BatchOperationTermination value, + PayloadVisitor visitPayload, + PayloadsVisitor visitPayloads) + { + if (value.Details != null) + { + await visitPayloads(value.Details.Payloads_).ConfigureAwait(false); + } } - private static async Task Visit_temporal_api_common_v1_Memo( - global::Temporalio.Api.Common.V1.Memo value, + private static async Task Visit_temporal_api_batch_v1_BatchOperationSignal( + global::Temporalio.Api.Batch.V1.BatchOperationSignal value, PayloadVisitor visitPayload, PayloadsVisitor visitPayloads) { - foreach (var item_temporal_api_common_v1_Memo_1 in value.Fields.Values) + if (value.Input != null) { - if (item_temporal_api_common_v1_Memo_1 != null) - { - await visitPayload(item_temporal_api_common_v1_Memo_1).ConfigureAwait(false); - } + await visitPayloads(value.Input.Payloads_).ConfigureAwait(false); + } + if (value.Header != null) + { + await Visit_temporal_api_common_v1_Header(value.Header, visitPayload, visitPayloads).ConfigureAwait(false); } } - private static async Task Visit_temporal_api_common_v1_Header( - global::Temporalio.Api.Common.V1.Header value, + private static async Task Visit_temporal_api_batch_v1_BatchOperationReset( + global::Temporalio.Api.Batch.V1.BatchOperationReset value, PayloadVisitor visitPayload, PayloadsVisitor visitPayloads) { - foreach (var item_temporal_api_common_v1_Header_1 in value.Fields.Values) + foreach (var item_temporal_api_batch_v1_BatchOperationReset_5 in value.PostResetOperations) { - if (item_temporal_api_common_v1_Header_1 != null) - { - await visitPayload(item_temporal_api_common_v1_Header_1).ConfigureAwait(false); - } + await Visit_temporal_api_workflow_v1_PostResetOperation(item_temporal_api_batch_v1_BatchOperationReset_5, visitPayload, visitPayloads).ConfigureAwait(false); } } - private static async Task Visit_temporal_api_sdk_v1_UserMetadata( - global::Temporalio.Api.Sdk.V1.UserMetadata value, + private static async Task Visit_temporal_api_workflowservice_v1_StartBatchOperationRequest( + global::Temporalio.Api.WorkflowService.V1.StartBatchOperationRequest value, PayloadVisitor visitPayload, PayloadsVisitor visitPayloads) { - if (value.Summary != null) + if (value.TerminationOperation != null) { - await visitPayload(value.Summary).ConfigureAwait(false); + await Visit_temporal_api_batch_v1_BatchOperationTermination(value.TerminationOperation, visitPayload, visitPayloads).ConfigureAwait(false); } - if (value.Details != null) + if (value.SignalOperation != null) { - await visitPayload(value.Details).ConfigureAwait(false); + await Visit_temporal_api_batch_v1_BatchOperationSignal(value.SignalOperation, visitPayload, visitPayloads).ConfigureAwait(false); + } + if (value.ResetOperation != null) + { + await Visit_temporal_api_batch_v1_BatchOperationReset(value.ResetOperation, visitPayload, visitPayloads).ConfigureAwait(false); } } - private static async Task Visit_temporal_api_workflowservice_v1_SignalWithStartWorkflowExecutionRequest( - global::Temporalio.Api.WorkflowService.V1.SignalWithStartWorkflowExecutionRequest value, + private static async Task Visit_temporal_api_nexus_v1_StartOperationRequest( + global::Temporalio.Api.Nexus.V1.StartOperationRequest value, + PayloadVisitor visitPayload, + PayloadsVisitor visitPayloads) + { + if (value.Payload != null) + { + await visitPayload(value.Payload).ConfigureAwait(false); + } + } + + private static async Task Visit_temporal_api_nexus_v1_Request( + global::Temporalio.Api.Nexus.V1.Request value, + PayloadVisitor visitPayload, + PayloadsVisitor visitPayloads) + { + if (value.StartOperation != null) + { + await Visit_temporal_api_nexus_v1_StartOperationRequest(value.StartOperation, visitPayload, visitPayloads).ConfigureAwait(false); + } + } + + private static async Task Visit_temporal_api_workflowservice_v1_PollNexusTaskQueueResponse( + global::Temporalio.Api.WorkflowService.V1.PollNexusTaskQueueResponse value, + PayloadVisitor visitPayload, + PayloadsVisitor visitPayloads) + { + if (value.Request != null) + { + await Visit_temporal_api_nexus_v1_Request(value.Request, visitPayload, visitPayloads).ConfigureAwait(false); + } + } + + private static async Task Visit_temporal_api_nexus_v1_StartOperationResponse_Sync( + global::Temporalio.Api.Nexus.V1.StartOperationResponse.Types.Sync value, + PayloadVisitor visitPayload, + PayloadsVisitor visitPayloads) + { + if (value.Payload != null) + { + await visitPayload(value.Payload).ConfigureAwait(false); + } + } + + private static async Task Visit_temporal_api_nexus_v1_StartOperationResponse( + global::Temporalio.Api.Nexus.V1.StartOperationResponse value, + PayloadVisitor visitPayload, + PayloadsVisitor visitPayloads) + { + if (value.SyncSuccess != null) + { + await Visit_temporal_api_nexus_v1_StartOperationResponse_Sync(value.SyncSuccess, visitPayload, visitPayloads).ConfigureAwait(false); + } + if (value.Failure != null) + { + await Visit_temporal_api_failure_v1_Failure(value.Failure, visitPayload, visitPayloads).ConfigureAwait(false); + } + } + + private static async Task Visit_temporal_api_nexus_v1_Response( + global::Temporalio.Api.Nexus.V1.Response value, + PayloadVisitor visitPayload, + PayloadsVisitor visitPayloads) + { + if (value.StartOperation != null) + { + await Visit_temporal_api_nexus_v1_StartOperationResponse(value.StartOperation, visitPayload, visitPayloads).ConfigureAwait(false); + } + } + + private static async Task Visit_temporal_api_workflowservice_v1_RespondNexusTaskCompletedRequest( + global::Temporalio.Api.WorkflowService.V1.RespondNexusTaskCompletedRequest value, + PayloadVisitor visitPayload, + PayloadsVisitor visitPayloads) + { + if (value.Response != null) + { + await Visit_temporal_api_nexus_v1_Response(value.Response, visitPayload, visitPayloads).ConfigureAwait(false); + } + } + + private static async Task Visit_temporal_api_workflowservice_v1_RespondNexusTaskFailedRequest( + global::Temporalio.Api.WorkflowService.V1.RespondNexusTaskFailedRequest value, + PayloadVisitor visitPayload, + PayloadsVisitor visitPayloads) + { + if (value.Failure != null) + { + await Visit_temporal_api_failure_v1_Failure(value.Failure, visitPayload, visitPayloads).ConfigureAwait(false); + } + } + + private static async Task Visit_temporal_api_workflowservice_v1_StartActivityExecutionRequest( + global::Temporalio.Api.WorkflowService.V1.StartActivityExecutionRequest value, PayloadVisitor visitPayload, PayloadsVisitor visitPayloads) { @@ -105,13 +2720,43 @@ private static async Task Visit_temporal_api_workflowservice_v1_SignalWithStartW { await visitPayloads(value.Input.Payloads_).ConfigureAwait(false); } - if (value.SignalInput != null) + if (value.Header != null) { - await visitPayloads(value.SignalInput.Payloads_).ConfigureAwait(false); + await Visit_temporal_api_common_v1_Header(value.Header, visitPayload, visitPayloads).ConfigureAwait(false); } - if (value.Memo != null) + if (value.UserMetadata != null) { - await Visit_temporal_api_common_v1_Memo(value.Memo, visitPayload, visitPayloads).ConfigureAwait(false); + await Visit_temporal_api_sdk_v1_UserMetadata(value.UserMetadata, visitPayload, visitPayloads).ConfigureAwait(false); + } + } + + private static async Task Visit_temporal_api_workflowservice_v1_StartNexusOperationExecutionRequest( + global::Temporalio.Api.WorkflowService.V1.StartNexusOperationExecutionRequest value, + PayloadVisitor visitPayload, + PayloadsVisitor visitPayloads) + { + if (value.Input != null) + { + await visitPayload(value.Input).ConfigureAwait(false); + } + if (value.UserMetadata != null) + { + await Visit_temporal_api_sdk_v1_UserMetadata(value.UserMetadata, visitPayload, visitPayloads).ConfigureAwait(false); + } + } + + private static async Task Visit_temporal_api_activity_v1_ActivityExecutionInfo( + global::Temporalio.Api.Activity.V1.ActivityExecutionInfo value, + PayloadVisitor visitPayload, + PayloadsVisitor visitPayloads) + { + if (value.HeartbeatDetails != null) + { + await visitPayloads(value.HeartbeatDetails.Payloads_).ConfigureAwait(false); + } + if (value.LastFailure != null) + { + await Visit_temporal_api_failure_v1_Failure(value.LastFailure, visitPayload, visitPayloads).ConfigureAwait(false); } if (value.Header != null) { @@ -123,12 +2768,187 @@ private static async Task Visit_temporal_api_workflowservice_v1_SignalWithStartW } } - private static Task Visit_temporal_api_workflowservice_v1_SignalWithStartWorkflowExecutionResponse( - global::Temporalio.Api.WorkflowService.V1.SignalWithStartWorkflowExecutionResponse value, + private static async Task Visit_temporal_api_activity_v1_ActivityExecutionOutcome( + global::Temporalio.Api.Activity.V1.ActivityExecutionOutcome value, + PayloadVisitor visitPayload, + PayloadsVisitor visitPayloads) + { + if (value.Result != null) + { + await visitPayloads(value.Result.Payloads_).ConfigureAwait(false); + } + if (value.Failure != null) + { + await Visit_temporal_api_failure_v1_Failure(value.Failure, visitPayload, visitPayloads).ConfigureAwait(false); + } + } + + private static async Task Visit_temporal_api_callback_v1_CallbackInfo( + global::Temporalio.Api.Callback.V1.CallbackInfo value, + PayloadVisitor visitPayload, + PayloadsVisitor visitPayloads) + { + if (value.LastAttemptFailure != null) + { + await Visit_temporal_api_failure_v1_Failure(value.LastAttemptFailure, visitPayload, visitPayloads).ConfigureAwait(false); + } + } + + private static async Task Visit_temporal_api_activity_v1_CallbackInfo( + global::Temporalio.Api.Activity.V1.CallbackInfo value, + PayloadVisitor visitPayload, + PayloadsVisitor visitPayloads) + { + if (value.Info != null) + { + await Visit_temporal_api_callback_v1_CallbackInfo(value.Info, visitPayload, visitPayloads).ConfigureAwait(false); + } + } + + private static async Task Visit_temporal_api_workflowservice_v1_DescribeActivityExecutionResponse( + global::Temporalio.Api.WorkflowService.V1.DescribeActivityExecutionResponse value, + PayloadVisitor visitPayload, + PayloadsVisitor visitPayloads) + { + if (value.Info != null) + { + await Visit_temporal_api_activity_v1_ActivityExecutionInfo(value.Info, visitPayload, visitPayloads).ConfigureAwait(false); + } + if (value.Input != null) + { + await visitPayloads(value.Input.Payloads_).ConfigureAwait(false); + } + if (value.Outcome != null) + { + await Visit_temporal_api_activity_v1_ActivityExecutionOutcome(value.Outcome, visitPayload, visitPayloads).ConfigureAwait(false); + } + foreach (var item_temporal_api_workflowservice_v1_DescribeActivityExecutionResponse_6 in value.Callbacks) + { + await Visit_temporal_api_activity_v1_CallbackInfo(item_temporal_api_workflowservice_v1_DescribeActivityExecutionResponse_6, visitPayload, visitPayloads).ConfigureAwait(false); + } + } + + private static async Task Visit_temporal_api_nexus_v1_NexusOperationExecutionCancellationInfo( + global::Temporalio.Api.Nexus.V1.NexusOperationExecutionCancellationInfo value, + PayloadVisitor visitPayload, + PayloadsVisitor visitPayloads) + { + if (value.LastAttemptFailure != null) + { + await Visit_temporal_api_failure_v1_Failure(value.LastAttemptFailure, visitPayload, visitPayloads).ConfigureAwait(false); + } + } + + private static async Task Visit_temporal_api_nexus_v1_NexusOperationExecutionInfo( + global::Temporalio.Api.Nexus.V1.NexusOperationExecutionInfo value, + PayloadVisitor visitPayload, + PayloadsVisitor visitPayloads) + { + if (value.LastAttemptFailure != null) + { + await Visit_temporal_api_failure_v1_Failure(value.LastAttemptFailure, visitPayload, visitPayloads).ConfigureAwait(false); + } + if (value.CancellationInfo != null) + { + await Visit_temporal_api_nexus_v1_NexusOperationExecutionCancellationInfo(value.CancellationInfo, visitPayload, visitPayloads).ConfigureAwait(false); + } + if (value.UserMetadata != null) + { + await Visit_temporal_api_sdk_v1_UserMetadata(value.UserMetadata, visitPayload, visitPayloads).ConfigureAwait(false); + } + } + + private static async Task Visit_temporal_api_workflowservice_v1_DescribeNexusOperationExecutionResponse( + global::Temporalio.Api.WorkflowService.V1.DescribeNexusOperationExecutionResponse value, + PayloadVisitor visitPayload, + PayloadsVisitor visitPayloads) + { + if (value.Info != null) + { + await Visit_temporal_api_nexus_v1_NexusOperationExecutionInfo(value.Info, visitPayload, visitPayloads).ConfigureAwait(false); + } + if (value.Input != null) + { + await visitPayload(value.Input).ConfigureAwait(false); + } + if (value.Result != null) + { + await visitPayload(value.Result).ConfigureAwait(false); + } + if (value.Failure != null) + { + await Visit_temporal_api_failure_v1_Failure(value.Failure, visitPayload, visitPayloads).ConfigureAwait(false); + } + } + + private static async Task Visit_temporal_api_workflowservice_v1_PollActivityExecutionResponse( + global::Temporalio.Api.WorkflowService.V1.PollActivityExecutionResponse value, + PayloadVisitor visitPayload, + PayloadsVisitor visitPayloads) + { + if (value.Outcome != null) + { + await Visit_temporal_api_activity_v1_ActivityExecutionOutcome(value.Outcome, visitPayload, visitPayloads).ConfigureAwait(false); + } + } + + private static async Task Visit_temporal_api_workflowservice_v1_PollNexusOperationExecutionResponse( + global::Temporalio.Api.WorkflowService.V1.PollNexusOperationExecutionResponse value, PayloadVisitor visitPayload, PayloadsVisitor visitPayloads) { - return Task.CompletedTask; + if (value.Result != null) + { + await visitPayload(value.Result).ConfigureAwait(false); + } + if (value.Failure != null) + { + await Visit_temporal_api_failure_v1_Failure(value.Failure, visitPayload, visitPayloads).ConfigureAwait(false); + } + } + + private static async Task Visit_temporal_api_workflowservice_v1_CountActivityExecutionsResponse_AggregationGroup( + global::Temporalio.Api.WorkflowService.V1.CountActivityExecutionsResponse.Types.AggregationGroup value, + PayloadVisitor visitPayload, + PayloadsVisitor visitPayloads) + { + foreach (var payload_temporal_api_workflowservice_v1_CountActivityExecutionsResponse_AggregationGroup_1 in value.GroupValues) + { + await visitPayload(payload_temporal_api_workflowservice_v1_CountActivityExecutionsResponse_AggregationGroup_1).ConfigureAwait(false); + } + } + + private static async Task Visit_temporal_api_workflowservice_v1_CountActivityExecutionsResponse( + global::Temporalio.Api.WorkflowService.V1.CountActivityExecutionsResponse value, + PayloadVisitor visitPayload, + PayloadsVisitor visitPayloads) + { + foreach (var item_temporal_api_workflowservice_v1_CountActivityExecutionsResponse_2 in value.Groups) + { + await Visit_temporal_api_workflowservice_v1_CountActivityExecutionsResponse_AggregationGroup(item_temporal_api_workflowservice_v1_CountActivityExecutionsResponse_2, visitPayload, visitPayloads).ConfigureAwait(false); + } + } + + private static async Task Visit_temporal_api_workflowservice_v1_CountNexusOperationExecutionsResponse_AggregationGroup( + global::Temporalio.Api.WorkflowService.V1.CountNexusOperationExecutionsResponse.Types.AggregationGroup value, + PayloadVisitor visitPayload, + PayloadsVisitor visitPayloads) + { + foreach (var payload_temporal_api_workflowservice_v1_CountNexusOperationExecutionsResponse_AggregationGroup_1 in value.GroupValues) + { + await visitPayload(payload_temporal_api_workflowservice_v1_CountNexusOperationExecutionsResponse_AggregationGroup_1).ConfigureAwait(false); + } + } + + private static async Task Visit_temporal_api_workflowservice_v1_CountNexusOperationExecutionsResponse( + global::Temporalio.Api.WorkflowService.V1.CountNexusOperationExecutionsResponse value, + PayloadVisitor visitPayload, + PayloadsVisitor visitPayloads) + { + foreach (var item_temporal_api_workflowservice_v1_CountNexusOperationExecutionsResponse_2 in value.Groups) + { + await Visit_temporal_api_workflowservice_v1_CountNexusOperationExecutionsResponse_AggregationGroup(item_temporal_api_workflowservice_v1_CountNexusOperationExecutionsResponse_2, visitPayload, visitPayloads).ConfigureAwait(false); + } } } diff --git a/src/Temporalio/Worker/WorkflowInstance.cs b/src/Temporalio/Worker/WorkflowInstance.cs index e8b82f4a..5199bf9d 100644 --- a/src/Temporalio/Worker/WorkflowInstance.cs +++ b/src/Temporalio/Worker/WorkflowInstance.cs @@ -2681,11 +2681,11 @@ public override Task> ScheduleNexusOperati new CanceledFailureException("Nexus operation cancelled before scheduled")); } - // TODO: Scope the generated System Nexus support converter context around this - // operation converter once the generated support file is ingested into the SDK. var systemNexusPayloadConverter = SystemNexusPayloadVisitor.IsSystemNexusEndpoint( input.ClientOptions.Endpoint) ? - new SystemNexusPayloadConverter() : null; + new SystemNexusPayloadConverter( + instance.payloadConverterWorkflowContext, + instance.failureConverterWorkflowContext) : null; var operationPayloadConverter = systemNexusPayloadConverter ?? instance.payloadConverterNoContext; diff --git a/src/Temporalio/Workflows/Generated/Models.cs b/src/Temporalio/Workflows/Generated/Models.cs index 66327efa..c9f20f2c 100644 --- a/src/Temporalio/Workflows/Generated/Models.cs +++ b/src/Temporalio/Workflows/Generated/Models.cs @@ -1,20 +1,69 @@ // -// Generated by nex-gen. DO NOT EDIT! +// Generated by nexgen. DO NOT EDIT! #nullable enable #pragma warning disable CS1591 using System; using System.CodeDom.Compiler; using System.Collections.Generic; +using Temporalio.Converters; namespace Temporalio.Workflows { + [Temporalio.Converters.TemporalTransferTypeConverter(typeof(UserMetadata.TransferTypeConverter))] + [GeneratedCode("nexgen", null)] + internal class UserMetadata + { + /// + /// Single-line fixed summary for the workflow execution that may appear in UI and CLI. This can be in single-line Temporal Markdown format. + /// + public object? StaticSummary { get; init; } + /// + /// General fixed details for the workflow execution that may appear in UI and CLI. This can be in Temporal Markdown format and can span multiple lines. This value is fixed on the workflow execution and cannot be updated. + /// + public object? StaticDetails { get; init; } + + internal static UserMetadata FromTransferType(Temporalio.Api.Sdk.V1.UserMetadata wire) + { + return new UserMetadata() + { + StaticSummary = wire.Summary == null ? null : ProtoExtensions.FromPayload(wire.Summary), + StaticDetails = wire.Details == null ? null : ProtoExtensions.FromPayload(wire.Details), + }; + } + + internal Temporalio.Api.Sdk.V1.UserMetadata ToTransferType() + { + var proto = new Temporalio.Api.Sdk.V1.UserMetadata(); + if (StaticSummary is { } staticSummary) + { + proto.Summary = ProtoExtensions.ToPayload(staticSummary); + } + if (StaticDetails is { } staticDetails) + { + proto.Details = ProtoExtensions.ToPayload(staticDetails); + } + return proto; + } + + public sealed class TransferTypeConverter : Temporalio.Converters.ITemporalTransferTypeConverter + { + public System.Type TransferType => typeof(Temporalio.Api.Sdk.V1.UserMetadata); + + public object? ToTransferType(object? value) => value is null ? null : ((UserMetadata)value).ToTransferType(); + + public object? FromTransferType(object? transferType) => transferType is null ? null : UserMetadata.FromTransferType((Temporalio.Api.Sdk.V1.UserMetadata)transferType); + } + + } + /// /// Request fields for signaling a workflow, starting it first if needed. /// /// WARNING: This API is experimental and may change in the future. - [GeneratedCode("nex-gen", null)] + [Temporalio.Converters.TemporalTransferTypeConverter(typeof(SignalWithStartWorkflowRequest.TransferTypeConverter))] + [GeneratedCode("nexgen", null)] internal class SignalWithStartWorkflowRequest { internal SignalWithStartWorkflowRequest(string workflow, string id, string taskQueue, string signal) @@ -102,11 +151,40 @@ internal SignalWithStartWorkflowRequest(string workflow, string id, string taskQ /// public System.TimeSpan? StartDelay { get; init; } public UserMetadata? UserMetadata { get; init; } + private string? _namespace; + public string Namespace + { + get => _namespace ?? TemporalWorkflowContext.WorkflowNamespace(); + init => _namespace = value; + } - public Temporalio.Api.WorkflowService.V1.SignalWithStartWorkflowExecutionRequest ToProto() + internal static SignalWithStartWorkflowRequest FromTransferType(Temporalio.Api.WorkflowService.V1.SignalWithStartWorkflowExecutionRequest wire) + { + return new SignalWithStartWorkflowRequest(ProtoExtensions.FromWorkflowTypeProto(wire.WorkflowType), wire.WorkflowId, ProtoExtensions.FromTaskQueueProto(wire.TaskQueue), wire.SignalName) + { + Args = wire.Input == null ? null : ProtoExtensions.FromPayloads(wire.Input), + SignalArgs = wire.SignalInput == null ? null : ProtoExtensions.FromPayloads(wire.SignalInput), + ExecutionTimeout = wire.WorkflowExecutionTimeout == null ? null : ProtoExtensions.FromDurationProto(wire.WorkflowExecutionTimeout), + RunTimeout = wire.WorkflowRunTimeout == null ? null : ProtoExtensions.FromDurationProto(wire.WorkflowRunTimeout), + TaskTimeout = wire.WorkflowTaskTimeout == null ? null : ProtoExtensions.FromDurationProto(wire.WorkflowTaskTimeout), + RequestId = string.IsNullOrEmpty(wire.RequestId) ? null : wire.RequestId, + IdReusePolicy = (int)wire.WorkflowIdReusePolicy == 0 ? null : wire.WorkflowIdReusePolicy, + IdConflictPolicy = (int)wire.WorkflowIdConflictPolicy == 0 ? null : wire.WorkflowIdConflictPolicy, + RetryPolicy = wire.RetryPolicy == null ? null : ProtoExtensions.FromRetryPolicyProto(wire.RetryPolicy), + CronSchedule = string.IsNullOrEmpty(wire.CronSchedule) ? null : wire.CronSchedule, + Memo = wire.Memo == null ? null : ProtoExtensions.FromMemoProto(wire.Memo), + SearchAttributes = wire.SearchAttributes == null ? null : ProtoExtensions.FromSearchAttributesProto(wire.SearchAttributes), + Priority = wire.Priority == null ? null : ProtoExtensions.FromPriorityProto(wire.Priority), + VersioningOverride = wire.VersioningOverride == null ? null : ProtoExtensions.FromVersioningOverrideProto(wire.VersioningOverride), + StartDelay = wire.WorkflowStartDelay == null ? null : ProtoExtensions.FromDurationProto(wire.WorkflowStartDelay), + UserMetadata = wire.UserMetadata == null ? null : UserMetadata.FromTransferType(wire.UserMetadata), + }; + } + + internal Temporalio.Api.WorkflowService.V1.SignalWithStartWorkflowExecutionRequest ToTransferType() { var proto = new Temporalio.Api.WorkflowService.V1.SignalWithStartWorkflowExecutionRequest(); - proto.Namespace = TemporalWorkflowContext.WorkflowNamespace(); + proto.Namespace = Namespace; proto.WorkflowType = ProtoExtensions.ToWorkflowTypeProto(Workflow); if (Args is { } args) { @@ -173,39 +251,69 @@ public Temporalio.Api.WorkflowService.V1.SignalWithStartWorkflowExecutionRequest } if (UserMetadata is { } userMetadata) { - proto.UserMetadata = userMetadata.ToProto(); + proto.UserMetadata = (Temporalio.Api.Sdk.V1.UserMetadata)userMetadata.ToTransferType(); } return proto; } + public sealed class TransferTypeConverter : Temporalio.Converters.ITemporalTransferTypeConverter + { + public System.Type TransferType => typeof(Temporalio.Api.WorkflowService.V1.SignalWithStartWorkflowExecutionRequest); + + public object? ToTransferType(object? value) => value is null ? null : ((SignalWithStartWorkflowRequest)value).ToTransferType(); + + public object? FromTransferType(object? transferType) => transferType is null ? null : SignalWithStartWorkflowRequest.FromTransferType((Temporalio.Api.WorkflowService.V1.SignalWithStartWorkflowExecutionRequest)transferType); + } + } - [GeneratedCode("nex-gen", null)] - internal class UserMetadata + /// WARNING: This API is experimental and may change in the future. + [Temporalio.Converters.TemporalTransferTypeConverter(typeof(SignalWithStartWorkflowResponse.TransferTypeConverter))] + [GeneratedCode("nexgen", null)] + internal class SignalWithStartWorkflowResponse { - /// - /// Single-line fixed summary for the workflow execution that may appear in UI and CLI. This can be in single-line Temporal Markdown format. - /// - public object? StaticSummary { get; init; } - /// - /// General fixed details for the workflow execution that may appear in UI and CLI. This can be in Temporal Markdown format and can span multiple lines. This value is fixed on the workflow execution and cannot be updated. - /// - public object? StaticDetails { get; init; } + internal SignalWithStartWorkflowResponse(string firstExecutionRunId) + { + FirstExecutionRunId = firstExecutionRunId; + } - public Temporalio.Api.Sdk.V1.UserMetadata ToProto() + public string? RunId { get; init; } + public bool? Started { get; init; } + public string FirstExecutionRunId { get; } + + internal static SignalWithStartWorkflowResponse FromTransferType(Temporalio.Api.WorkflowService.V1.SignalWithStartWorkflowExecutionResponse wire) { - var proto = new Temporalio.Api.Sdk.V1.UserMetadata(); - if (StaticSummary is { } staticSummary) + return new SignalWithStartWorkflowResponse(wire.FirstExecutionRunId) { - proto.Summary = ProtoExtensions.ToPayload(staticSummary); + RunId = string.IsNullOrEmpty(wire.RunId) ? null : wire.RunId, + Started = wire.Started == false ? null : wire.Started, + }; + } + + internal Temporalio.Api.WorkflowService.V1.SignalWithStartWorkflowExecutionResponse ToTransferType() + { + var proto = new Temporalio.Api.WorkflowService.V1.SignalWithStartWorkflowExecutionResponse(); + if (RunId is { } runId) + { + proto.RunId = runId; } - if (StaticDetails is { } staticDetails) + if (Started is { } started) { - proto.Details = ProtoExtensions.ToPayload(staticDetails); + proto.Started = started; } + proto.FirstExecutionRunId = FirstExecutionRunId; return proto; } + public sealed class TransferTypeConverter : Temporalio.Converters.ITemporalTransferTypeConverter + { + public System.Type TransferType => typeof(Temporalio.Api.WorkflowService.V1.SignalWithStartWorkflowExecutionResponse); + + public object? ToTransferType(object? value) => value is null ? null : ((SignalWithStartWorkflowResponse)value).ToTransferType(); + + public object? FromTransferType(object? transferType) => transferType is null ? null : SignalWithStartWorkflowResponse.FromTransferType((Temporalio.Api.WorkflowService.V1.SignalWithStartWorkflowExecutionResponse)transferType); + } + } } diff --git a/src/Temporalio/Workflows/Generated/Operations.cs b/src/Temporalio/Workflows/Generated/Operations.cs index 01eb9297..e975c2e3 100644 --- a/src/Temporalio/Workflows/Generated/Operations.cs +++ b/src/Temporalio/Workflows/Generated/Operations.cs @@ -1,5 +1,5 @@ // -// Generated by nex-gen. DO NOT EDIT! +// Generated by nexgen. DO NOT EDIT! #nullable enable #pragma warning disable CS1591 @@ -8,10 +8,8 @@ using System.Collections.Generic; using System.Linq; using System.Linq.Expressions; -using System.Reflection; using System.Threading.Tasks; using Google.Protobuf.WellKnownTypes; -using Temporalio.Converters; namespace Temporalio.Workflows { @@ -20,7 +18,7 @@ namespace Temporalio.Workflows /// Signal a workflow, starting it first if needed. /// /// WARNING: This API is experimental and may change in the future. - [GeneratedCode("nex-gen", null)] + [GeneratedCode("nexgen", null)] public class SignalWithStartWorkflowOptions { public SignalWithStartWorkflowOptions(string id, string taskQueue) @@ -101,7 +99,7 @@ public SignalWithStartWorkflowOptions(string id, string taskQueue) public static partial class Workflow { - [GeneratedCode("nex-gen", null)] + [GeneratedCode("nexgen", null)] private const string WorkflowServiceEndpoint = "__temporal_system"; /// @@ -110,12 +108,11 @@ public static partial class Workflow /// Request fields for signaling a workflow, starting it first if needed. /// A workflow handle to the started workflow. /// WARNING: This API is experimental and may change in the future. - [GeneratedCode("nex-gen", null)] + [GeneratedCode("nexgen", null)] private static async Task SignalWithStartWorkflowAsync(SignalWithStartWorkflowRequest request) { var client = Workflow.CreateNexusWorkflowClient(WorkflowServiceEndpoint); - var protoRequest = request.ToProto(); - var result = await client.ExecuteNexusOperationAsync(svc => svc.SignalWithStartWorkflow(protoRequest)).ConfigureAwait(true); + var result = await client.ExecuteNexusOperationAsync(svc => svc.SignalWithStartWorkflow(request)).ConfigureAwait(true); return Temporalio.Workflows.Workflow.GetExternalWorkflowHandle(request.Id, result.RunId); } @@ -129,7 +126,7 @@ public static partial class Workflow /// Request fields for signaling a workflow, starting it first if needed. /// A workflow handle to the started workflow. /// WARNING: This API is experimental and may change in the future. - [GeneratedCode("nex-gen", null)] + [GeneratedCode("nexgen", null)] public static Task SignalWithStartWorkflowAsync(string workflow, IReadOnlyCollection? args, string signal, IReadOnlyCollection? signalArgs, SignalWithStartWorkflowOptions options) { var request = new SignalWithStartWorkflowRequest(workflow, options.Id, options.TaskQueue, signal) @@ -163,7 +160,7 @@ public static partial class Workflow /// Request fields for signaling a workflow, starting it first if needed. /// A workflow handle to the started workflow. /// WARNING: This API is experimental and may change in the future. - [GeneratedCode("nex-gen", null)] + [GeneratedCode("nexgen", null)] public static Task SignalWithStartWorkflowAsync(Expression>> workflow, string signal, IReadOnlyCollection? signalArgs, SignalWithStartWorkflowOptions options) { var (workflowMethod, workflowArgs) = TemporalFunctionNames.ExtractCall(workflow); @@ -198,7 +195,7 @@ public static partial class Workflow /// Request fields for signaling a workflow, starting it first if needed. /// A workflow handle to the started workflow. /// WARNING: This API is experimental and may change in the future. - [GeneratedCode("nex-gen", null)] + [GeneratedCode("nexgen", null)] public static Task SignalWithStartWorkflowAsync(string workflow, IReadOnlyCollection? args, Expression> signal, SignalWithStartWorkflowOptions options) { var (signalMethod, signalArgs) = TemporalFunctionNames.ExtractCall(signal); @@ -232,7 +229,7 @@ public static partial class Workflow /// Request fields for signaling a workflow, starting it first if needed. /// A workflow handle to the started workflow. /// WARNING: This API is experimental and may change in the future. - [GeneratedCode("nex-gen", null)] + [GeneratedCode("nexgen", null)] public static Task SignalWithStartWorkflowAsync(Expression>> workflow, Expression> signal, SignalWithStartWorkflowOptions options) { var (workflowMethod, workflowArgs) = TemporalFunctionNames.ExtractCall(workflow); diff --git a/src/Temporalio/Workflows/Generated/Service.cs b/src/Temporalio/Workflows/Generated/Service.cs index e2a201e3..dc7d63c5 100644 --- a/src/Temporalio/Workflows/Generated/Service.cs +++ b/src/Temporalio/Workflows/Generated/Service.cs @@ -1,17 +1,20 @@ // -// Generated by nex-gen. DO NOT EDIT! +// Generated by nexgen. DO NOT EDIT! #nullable enable #pragma warning disable CS1591 using System; using System.CodeDom.Compiler; +using System.Collections.Generic; +using System.Threading.Tasks; using NexusRpc; +using Temporalio.Converters; namespace Temporalio.Workflows { /// WARNING: This API is experimental and may change in the future. - [GeneratedCode("nex-gen", null)] + [GeneratedCode("nexgen", null)] [NexusService("temporal.api.workflowservice.v1.WorkflowService")] internal interface IWorkflowService { @@ -20,10 +23,47 @@ internal interface IWorkflowService /// /// A workflow handle to the started workflow. /// WARNING: This API is experimental and may change in the future. - [GeneratedCode("nex-gen", null)] + [GeneratedCode("nexgen", null)] [NexusOperation("SignalWithStartWorkflowExecution")] - Temporalio.Api.WorkflowService.V1.SignalWithStartWorkflowExecutionResponse SignalWithStartWorkflow(Temporalio.Api.WorkflowService.V1.SignalWithStartWorkflowExecutionRequest request); + SignalWithStartWorkflowResponse SignalWithStartWorkflow(SignalWithStartWorkflowRequest request); } + internal interface INexgenOperationInfo + { + OperationDefinition Operation { get; } + + Func? SerializationContext { get; } + } + + internal sealed class NexgenOperationInfo : INexgenOperationInfo + { + internal NexgenOperationInfo( + OperationDefinition operation, + Func? serializationContext = null) + { + Operation = operation; + SerializationContext = serializationContext; + } + + internal OperationDefinition Operation { get; } + + OperationDefinition INexgenOperationInfo.Operation => Operation; + + internal Func? SerializationContext { get; } + + Func? INexgenOperationInfo.SerializationContext => SerializationContext == null ? null : request => SerializationContext((TRequest)request); + } + + internal static class NexgenOperationRegistry + { + private static readonly ServiceDefinition WorkflowServiceServiceDefinition = ServiceDefinition.FromType(); + + internal static IReadOnlyDictionary<(string Service, string Operation), INexgenOperationInfo> Operations { get; } = new Dictionary<(string Service, string Operation), INexgenOperationInfo> + { + [("temporal.api.workflowservice.v1.WorkflowService", "SignalWithStartWorkflowExecution")] = new NexgenOperationInfo( + WorkflowServiceServiceDefinition.Operations["SignalWithStartWorkflowExecution"]), + }; + } + } diff --git a/src/Temporalio/Workflows/Generated/TemporalSupport.cs b/src/Temporalio/Workflows/Generated/TemporalSupport.cs index 84c3a7eb..d1a34208 100644 --- a/src/Temporalio/Workflows/Generated/TemporalSupport.cs +++ b/src/Temporalio/Workflows/Generated/TemporalSupport.cs @@ -1,15 +1,18 @@ // -// Generated by nex-gen. DO NOT EDIT! +// Generated by nexgen. DO NOT EDIT! #nullable enable using System; using System.Collections.Generic; +using System.Linq; using System.Linq.Expressions; using System.Reflection; +using System.Threading; using Google.Protobuf.WellKnownTypes; using Temporalio.Common; using Temporalio.Converters; using ApiCommon = Temporalio.Api.Common.V1; using ApiDeployment = Temporalio.Api.Deployment.V1; +using ApiFailure = Temporalio.Api.Failure.V1; using ApiTaskQueue = Temporalio.Api.TaskQueue.V1; using ApiWorkflow = Temporalio.Api.Workflow.V1; @@ -22,8 +25,18 @@ internal static class TemporalWorkflowContext internal static class TemporalFunctionNames { - internal static (MethodInfo Method, IReadOnlyCollection Args) ExtractCall( - Expression> expression) => ExpressionUtil.ExtractCall(expression); + internal static (MethodInfo Method, IReadOnlyCollection Args) ExtractCall( + Expression expression) + { + if (expression.Body is not MethodCallExpression call) + { + throw new ArgumentException("Expression must be a single method call", nameof(expression)); + } + var method = call.Method; + var args = call.Arguments.Select(arg => Expression.Lambda>( + Expression.Convert(arg, typeof(object))).Compile()()).ToArray(); + return (method, args); + } internal static string WorkflowName(MethodInfo method) { @@ -47,39 +60,141 @@ internal static string SignalName(MethodInfo method) } } + internal static class SystemNexusConverterContext + { + private static readonly AsyncLocal CurrentLocal = new(); + + internal static IPayloadConverter PayloadConverter => Current.PayloadConverter; + + internal static IFailureConverter FailureConverter => Current.FailureConverter; + + private static ConverterContext Current => CurrentLocal.Value ?? throw new InvalidOperationException( + "The System Nexus converter context is only available while a System Nexus transfer type converter is executing."); + + internal static IDisposable Push( + IPayloadConverter payloadConverter, + IFailureConverter failureConverter) + { + var previous = CurrentLocal.Value; + CurrentLocal.Value = new(payloadConverter, failureConverter); + return new PopOnDispose(previous); + } + + private sealed record ConverterContext( + IPayloadConverter PayloadConverter, + IFailureConverter FailureConverter); + + private sealed class PopOnDispose : IDisposable + { + private readonly ConverterContext? previous; + private bool disposed; + + internal PopOnDispose(ConverterContext? previous) => this.previous = previous; + + public void Dispose() + { + if (!disposed) + { + CurrentLocal.Value = previous; + disposed = true; + } + } + } + } + internal static class ProtoExtensions { internal static ApiCommon.WorkflowType ToWorkflowTypeProto(this string value) => new() { Name = value }; + internal static string FromWorkflowTypeProto(ApiCommon.WorkflowType value) => + value.Name; + internal static ApiTaskQueue.TaskQueue ToTaskQueueProto(this string value) => new() { Name = value }; + internal static string FromTaskQueueProto(ApiTaskQueue.TaskQueue value) => + value.Name; + internal static ApiCommon.Payload ToPayload(object? value) => - Workflow.PayloadConverter.ToPayload(value); + SystemNexusConverterContext.PayloadConverter.ToPayload(value); + + internal static object? FromPayload(ApiCommon.Payload payload) => + SystemNexusConverterContext.PayloadConverter.ToValue(payload); internal static ApiCommon.Payloads ToPayloads(IEnumerable values) { var payloads = new ApiCommon.Payloads(); - payloads.Payloads_.AddRange(Workflow.PayloadConverter.ToPayloads(values as IReadOnlyCollection ?? new List(values))); + payloads.Payloads_.AddRange(SystemNexusConverterContext.PayloadConverter.ToPayloads( + values as IReadOnlyCollection ?? new List(values))); return payloads; } + internal static IReadOnlyCollection FromPayloads(ApiCommon.Payloads payloads) => + payloads.Payloads_.Select(FromPayload).ToArray(); + + internal static ApiFailure.Failure ToFailureProto(this Exception value) => + SystemNexusConverterContext.FailureConverter.ToFailure( + value, SystemNexusConverterContext.PayloadConverter); + + internal static Exception FromFailureProto(ApiFailure.Failure value) => + SystemNexusConverterContext.FailureConverter.ToException( + value, SystemNexusConverterContext.PayloadConverter); + internal static Duration ToProto(this TimeSpan value) => Duration.FromTimeSpan(value); + internal static TimeSpan FromDurationProto(Duration value) => + value.ToTimeSpan(); + internal static ApiCommon.RetryPolicy ToProto(this Temporalio.Common.RetryPolicy value) => ToRetryPolicy(value); + internal static Temporalio.Common.RetryPolicy FromRetryPolicyProto(ApiCommon.RetryPolicy value) => + FromRetryPolicy(value); + internal static ApiCommon.Memo ToProto(this IReadOnlyDictionary value) => ToMemo(value); + internal static IReadOnlyDictionary FromMemoProto(ApiCommon.Memo value) => + value.Fields.ToDictionary( + item => item.Key, + item => FromPayload(item.Value)); + internal static ApiCommon.Priority ToProto(this Temporalio.Common.Priority value) => ToPriority(value); + internal static Temporalio.Common.Priority FromPriorityProto(ApiCommon.Priority value) => + new( + value.PriorityKey == 0 ? null : value.PriorityKey, + value.FairnessKey, + value.FairnessWeight == 0 ? null : (float)value.FairnessWeight); + internal static ApiWorkflow.VersioningOverride ToProto(this Temporalio.Common.VersioningOverride value) => ToVersioningOverride(value); + internal static Temporalio.Common.SearchAttributeCollection FromSearchAttributesProto( + ApiCommon.SearchAttributes value) => + Temporalio.Common.SearchAttributeCollection.FromProto(value); + + internal static Temporalio.Common.VersioningOverride? FromVersioningOverrideProto( + ApiWorkflow.VersioningOverride versioningOverride) + { + if (versioningOverride.AutoUpgrade) + { + return new Temporalio.Common.VersioningOverride.AutoUpgrade(); + } + if (versioningOverride.Pinned is { } pinned) + { + return new Temporalio.Common.VersioningOverride.Pinned( + new Temporalio.Common.WorkerDeploymentVersion( + pinned.Version.DeploymentName, + pinned.Version.BuildId), + (Temporalio.Common.VersioningOverride.PinnedOverrideBehavior)pinned.Behavior); + } + return null; + } + private static ApiCommon.RetryPolicy ToRetryPolicy(Temporalio.Common.RetryPolicy policy) { var proto = new ApiCommon.RetryPolicy @@ -99,6 +214,25 @@ private static ApiCommon.RetryPolicy ToRetryPolicy(Temporalio.Common.RetryPolicy return proto; } + private static Temporalio.Common.RetryPolicy FromRetryPolicy(ApiCommon.RetryPolicy policy) + { + var retryPolicy = new Temporalio.Common.RetryPolicy + { + InitialInterval = policy.InitialInterval?.ToTimeSpan() ?? TimeSpan.FromSeconds(1), + BackoffCoefficient = (float)policy.BackoffCoefficient, + MaximumAttempts = policy.MaximumAttempts, + }; + if (policy.MaximumInterval is { } maximumInterval) + { + retryPolicy.MaximumInterval = maximumInterval.ToTimeSpan(); + } + if (policy.NonRetryableErrorTypes.Count > 0) + { + retryPolicy.NonRetryableErrorTypes = policy.NonRetryableErrorTypes.ToArray(); + } + return retryPolicy; + } + private static ApiCommon.Memo ToMemo(IReadOnlyDictionary memo) { var proto = new ApiCommon.Memo(); @@ -108,7 +242,7 @@ private static ApiCommon.Memo ToMemo(IReadOnlyDictionary memo) { throw new ArgumentException($"Memo value for {item.Key} is null", nameof(memo)); } - proto.Fields.Add(item.Key, Workflow.PayloadConverter.ToPayload(item.Value)); + proto.Fields.Add(item.Key, ToPayload(item.Value)); } return proto; } diff --git a/tests/Temporalio.Tests/Nexus/SystemNexusPayloadConverterTests.cs b/tests/Temporalio.Tests/Nexus/SystemNexusPayloadConverterTests.cs index 91914472..08cf12eb 100644 --- a/tests/Temporalio.Tests/Nexus/SystemNexusPayloadConverterTests.cs +++ b/tests/Temporalio.Tests/Nexus/SystemNexusPayloadConverterTests.cs @@ -10,7 +10,9 @@ public class SystemNexusPayloadConverterTests [Fact] public void TransferType_RoundTrips() { - var converter = new SystemNexusPayloadConverter(); + var converter = new SystemNexusPayloadConverter( + DataConverter.Default.PayloadConverter, + DataConverter.Default.FailureConverter); var value = new SystemNexusRequest("value"); var payload = converter.ToPayload(value); diff --git a/tests/Temporalio.Tests/Worker/SystemNexusTests.cs b/tests/Temporalio.Tests/Worker/SystemNexusTests.cs index 4c26b644..acc1e2ea 100644 --- a/tests/Temporalio.Tests/Worker/SystemNexusTests.cs +++ b/tests/Temporalio.Tests/Worker/SystemNexusTests.cs @@ -1,9 +1,6 @@ namespace Temporalio.Tests.Worker; using Temporalio.Api.Enums.V1; -using Temporalio.Client; -using Temporalio.Converters; -using Temporalio.Tests.Converters; using Temporalio.Worker; using Temporalio.Workflows; using Xunit; @@ -19,26 +16,20 @@ public SystemNexusTests(ITestOutputHelper output, WorkflowEnvironment env) [Fact] public async Task ExecuteWorkflowAsync_SignalWithStartFromWorkflow_SucceedsAndReplays() { - var newOptions = (TemporalClientOptions)Client.Options.Clone(); - newOptions.DataConverter = DataConverter.Default with - { - PayloadCodec = new Base64PayloadCodec(), - }; - var codecClient = new TemporalClient(Client.Connection, newOptions); var workerOptions = new TemporalWorkerOptions($"tq-{Guid.NewGuid()}"). AddWorkflow(); await ExecuteWorkerAsync( async worker => { var targetWorkflowId = $"workflow-{Guid.NewGuid()}"; - var callerHandle = await codecClient.StartWorkflowAsync( + var callerHandle = await Client.StartWorkflowAsync( (SystemNexusSignalWithStartCallerWorkflow workflow) => workflow.RunAsync(targetWorkflowId, worker.Options.TaskQueue!), new(id: $"workflow-{Guid.NewGuid()}", taskQueue: worker.Options.TaskQueue!)); var resultWorkflowId = await callerHandle.GetResultAsync(); Assert.Equal(targetWorkflowId, resultWorkflowId); - var targetHandle = codecClient.GetWorkflowHandle< + var targetHandle = Client.GetWorkflowHandle< SystemNexusSignalWithStartTargetWorkflow, IReadOnlyCollection>(targetWorkflowId); var events = await targetHandle.GetResultAsync(); @@ -48,15 +39,13 @@ await ExecuteWorkerAsync( Assert.Contains("Signal: signal-two", events); var replayer = new WorkflowReplayer( - new WorkflowReplayerOptions - { - DataConverter = newOptions.DataConverter, - }.AddWorkflow()); + new WorkflowReplayerOptions().AddWorkflow< + SystemNexusSignalWithStartCallerWorkflow>()); var replay = await replayer.ReplayWorkflowAsync(await callerHandle.FetchHistoryAsync()); Assert.Null(replay.ReplayFailure); }, workerOptions, - codecClient); + Client); } [Workflow]