/
IKitchenSinkWorkflow.cs
98 lines (80 loc) · 3.76 KB
/
IKitchenSinkWorkflow.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
namespace Temporalio.Tests;
using System.Text.Json.Serialization;
using Temporalio.Workflows;
[Workflow("kitchen_sink")]
public interface IKitchenSinkWorkflow
{
[WorkflowRun]
Task<string> RunAsync(KSWorkflowParams args);
[WorkflowSignal]
Task SomeActionSignalAsync(KSAction action);
[WorkflowSignal]
Task SomeSignalAsync(string arg);
[WorkflowQuery]
string SomeQuery(string arg);
}
[Workflow("kitchen_sink")]
public interface IKitchenSinkWorkflowWithReturnObject
{
[WorkflowRun]
Task<KSWorkflowResult> RunAsync(KSWorkflowParams args);
}
[Workflow("kitchen_sink")]
public interface IKitchenSinkWorkflowWithUnknownReturn
{
[WorkflowRun]
Task<string> RunAsync(KSWorkflowParams args);
}
public record KSWorkflowResult(string SomeString);
public record KSWorkflowParams(
[property: JsonPropertyName("actions")] IReadOnlyCollection<KSAction>? Actions = null,
[property: JsonPropertyName("action_signal")] string? ActionSignal = null)
{
public KSWorkflowParams(params KSAction[] actions)
: this(Actions: actions)
{
}
public KSWorkflowParams()
: this(Actions: null)
{
}
}
public record KSAction(
[property: JsonPropertyName("result")] KSResultAction? Result = null,
[property: JsonPropertyName("error")] KSErrorAction? Error = null,
[property: JsonPropertyName("continue_as_new")] KSContinueAsNewAction? ContinueAsNew = null,
[property: JsonPropertyName("sleep")] KSSleepAction? Sleep = null,
[property: JsonPropertyName("query_handler")] KSQueryHandlerAction? QueryHandler = null,
[property: JsonPropertyName("signal")] KSSignalAction? Signal = null,
[property: JsonPropertyName("execute_activity")] KSExecuteActivityAction? ExecuteActivity = null);
public record KSResultAction(
[property: JsonPropertyName("value")] object? Value = null,
[property: JsonPropertyName("run_id")] bool RunId = false);
public record KSErrorAction(
[property: JsonPropertyName("message")] string? Message = null,
[property: JsonPropertyName("details")] object? Details = null,
[property: JsonPropertyName("attempt")] bool Attempt = false);
public record KSContinueAsNewAction(
[property: JsonPropertyName("while_above_zero")] int? WhileAboveZero = null,
[property: JsonPropertyName("result")] object? Result = null);
public record KSSleepAction(
[property: JsonPropertyName("millis")] long Millis);
public record KSQueryHandlerAction(
[property: JsonPropertyName("name")] string Name,
[property: JsonPropertyName("error")] string? Error = null);
public record KSSignalAction(
[property: JsonPropertyName("name")] string Name);
public record KSExecuteActivityAction(
[property: JsonPropertyName("name")] string Name,
[property: JsonPropertyName("task_queue")] string? TaskQueue = null,
[property: JsonPropertyName("args")] IReadOnlyCollection<object?>? Args = null,
[property: JsonPropertyName("count")] int? Count = null,
[property: JsonPropertyName("index_as_arg")] bool IndexAsArg = false,
[property: JsonPropertyName("schedule_to_close_timeout_ms")] long? ScheduleToCloseTimeoutMS = null,
[property: JsonPropertyName("start_to_close_timeout_ms")] long? StartToCloseTimeoutMS = null,
[property: JsonPropertyName("schedule_to_start_timeout_ms")] long? ScheduleToStartTimeoutMS = null,
[property: JsonPropertyName("cancel_after_ms")] long? CancelAfterMS = null,
[property: JsonPropertyName("wait_for_cancellation")] bool WaitForCancellation = false,
[property: JsonPropertyName("heartbeat_timeout_ms")] long? HeartbeatTimeoutMS = null,
[property: JsonPropertyName("retry_max_attempts")] int? RetryMaxAttempts = null,
[property: JsonPropertyName("non_retryable_error_types")] IReadOnlyCollection<string>? NonRetryableErrorTypes = null);