@temporalio/core-bridge 1.15.0 → 1.16.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (209) hide show
  1. package/Cargo.lock +172 -70
  2. package/lib/native.d.ts +1 -1
  3. package/package.json +2 -2
  4. package/releases/aarch64-apple-darwin/index.node +0 -0
  5. package/releases/aarch64-unknown-linux-gnu/index.node +0 -0
  6. package/releases/x86_64-apple-darwin/index.node +0 -0
  7. package/releases/x86_64-pc-windows-msvc/index.node +0 -0
  8. package/releases/x86_64-unknown-linux-gnu/index.node +0 -0
  9. package/sdk-core/.github/workflows/per-pr.yml +6 -6
  10. package/sdk-core/AGENTS.md +41 -30
  11. package/sdk-core/Cargo.toml +3 -0
  12. package/sdk-core/README.md +15 -9
  13. package/sdk-core/crates/client/Cargo.toml +4 -0
  14. package/sdk-core/crates/client/README.md +139 -0
  15. package/sdk-core/crates/client/src/async_activity_handle.rs +297 -0
  16. package/sdk-core/crates/client/src/callback_based.rs +7 -0
  17. package/sdk-core/crates/client/src/errors.rs +294 -0
  18. package/sdk-core/crates/client/src/{raw.rs → grpc.rs} +280 -159
  19. package/sdk-core/crates/client/src/lib.rs +920 -1326
  20. package/sdk-core/crates/client/src/metrics.rs +24 -33
  21. package/sdk-core/crates/client/src/options_structs.rs +457 -0
  22. package/sdk-core/crates/client/src/replaceable.rs +5 -4
  23. package/sdk-core/crates/client/src/request_extensions.rs +8 -9
  24. package/sdk-core/crates/client/src/retry.rs +99 -54
  25. package/sdk-core/crates/client/src/{worker/mod.rs → worker.rs} +1 -1
  26. package/sdk-core/crates/client/src/workflow_handle.rs +826 -0
  27. package/sdk-core/crates/common/Cargo.toml +61 -2
  28. package/sdk-core/crates/common/build.rs +742 -12
  29. package/sdk-core/crates/common/protos/api_upstream/.github/workflows/ci.yml +2 -0
  30. package/sdk-core/crates/common/protos/api_upstream/Makefile +2 -1
  31. package/sdk-core/crates/common/protos/api_upstream/buf.yaml +0 -3
  32. package/sdk-core/crates/common/protos/api_upstream/cmd/check-path-conflicts/main.go +137 -0
  33. package/sdk-core/crates/common/protos/api_upstream/openapi/openapiv2.json +1166 -770
  34. package/sdk-core/crates/common/protos/api_upstream/openapi/openapiv3.yaml +1243 -750
  35. package/sdk-core/crates/common/protos/api_upstream/temporal/api/deployment/v1/message.proto +2 -2
  36. package/sdk-core/crates/common/protos/api_upstream/temporal/api/enums/v1/workflow.proto +4 -3
  37. package/sdk-core/crates/common/protos/api_upstream/temporal/api/failure/v1/message.proto +1 -0
  38. package/sdk-core/crates/common/protos/api_upstream/temporal/api/history/v1/message.proto +4 -0
  39. package/sdk-core/crates/common/protos/api_upstream/temporal/api/namespace/v1/message.proto +6 -0
  40. package/sdk-core/crates/common/protos/api_upstream/temporal/api/nexus/v1/message.proto +16 -1
  41. package/sdk-core/crates/common/protos/api_upstream/temporal/api/workflowservice/v1/request_response.proto +64 -6
  42. package/sdk-core/crates/common/protos/api_upstream/temporal/api/workflowservice/v1/service.proto +88 -33
  43. package/sdk-core/crates/common/protos/local/temporal/sdk/core/nexus/nexus.proto +4 -2
  44. package/sdk-core/crates/common/protos/local/temporal/sdk/core/workflow_activation/workflow_activation.proto +4 -0
  45. package/sdk-core/crates/common/protos/local/temporal/sdk/core/workflow_commands/workflow_commands.proto +5 -5
  46. package/sdk-core/crates/common/src/activity_definition.rs +20 -0
  47. package/sdk-core/crates/common/src/data_converters.rs +770 -0
  48. package/sdk-core/crates/common/src/envconfig.rs +5 -0
  49. package/sdk-core/crates/common/src/lib.rs +15 -211
  50. package/sdk-core/crates/common/src/payload_visitor.rs +648 -0
  51. package/sdk-core/crates/common/src/priority.rs +110 -0
  52. package/sdk-core/crates/common/src/protos/canned_histories.rs +3 -0
  53. package/sdk-core/crates/common/src/protos/history_builder.rs +45 -0
  54. package/sdk-core/crates/common/src/protos/history_info.rs +2 -0
  55. package/sdk-core/crates/common/src/protos/mod.rs +122 -27
  56. package/sdk-core/crates/common/src/protos/task_token.rs +3 -3
  57. package/sdk-core/crates/common/src/protos/utilities.rs +11 -0
  58. package/sdk-core/crates/{sdk-core → common}/src/telemetry/log_export.rs +5 -7
  59. package/sdk-core/crates/common/src/telemetry/metrics/core.rs +125 -0
  60. package/sdk-core/crates/common/src/telemetry/metrics.rs +268 -223
  61. package/sdk-core/crates/{sdk-core → common}/src/telemetry/otel.rs +8 -13
  62. package/sdk-core/crates/{sdk-core → common}/src/telemetry/prometheus_meter.rs +49 -50
  63. package/sdk-core/crates/{sdk-core → common}/src/telemetry/prometheus_server.rs +2 -3
  64. package/sdk-core/crates/common/src/telemetry.rs +264 -4
  65. package/sdk-core/crates/common/src/worker.rs +68 -603
  66. package/sdk-core/crates/common/src/workflow_definition.rs +60 -0
  67. package/sdk-core/crates/macros/Cargo.toml +5 -1
  68. package/sdk-core/crates/macros/src/activities_definitions.rs +585 -0
  69. package/sdk-core/crates/macros/src/fsm_impl.rs +507 -0
  70. package/sdk-core/crates/macros/src/lib.rs +138 -512
  71. package/sdk-core/crates/macros/src/macro_utils.rs +106 -0
  72. package/sdk-core/crates/macros/src/workflow_definitions.rs +1224 -0
  73. package/sdk-core/crates/sdk/Cargo.toml +19 -6
  74. package/sdk-core/crates/sdk/README.md +415 -0
  75. package/sdk-core/crates/sdk/src/activities.rs +417 -0
  76. package/sdk-core/crates/sdk/src/interceptors.rs +1 -1
  77. package/sdk-core/crates/sdk/src/lib.rs +757 -442
  78. package/sdk-core/crates/sdk/src/workflow_context/options.rs +45 -35
  79. package/sdk-core/crates/sdk/src/workflow_context.rs +1033 -289
  80. package/sdk-core/crates/sdk/src/workflow_future.rs +277 -213
  81. package/sdk-core/crates/sdk/src/workflows.rs +711 -0
  82. package/sdk-core/crates/sdk-core/Cargo.toml +57 -64
  83. package/sdk-core/crates/sdk-core/benches/workflow_replay_bench.rs +41 -35
  84. package/sdk-core/crates/sdk-core/machine_coverage/ActivityMachine_Coverage.puml +1 -1
  85. package/sdk-core/crates/sdk-core/src/abstractions.rs +6 -10
  86. package/sdk-core/crates/sdk-core/src/core_tests/activity_tasks.rs +6 -5
  87. package/sdk-core/crates/sdk-core/src/core_tests/mod.rs +13 -15
  88. package/sdk-core/crates/sdk-core/src/core_tests/queries.rs +21 -25
  89. package/sdk-core/crates/sdk-core/src/core_tests/replay_flag.rs +7 -10
  90. package/sdk-core/crates/sdk-core/src/core_tests/updates.rs +14 -17
  91. package/sdk-core/crates/sdk-core/src/core_tests/workers.rs +493 -26
  92. package/sdk-core/crates/sdk-core/src/core_tests/workflow_tasks.rs +4 -8
  93. package/sdk-core/crates/sdk-core/src/ephemeral_server/mod.rs +7 -7
  94. package/sdk-core/crates/sdk-core/src/histfetch.rs +20 -10
  95. package/sdk-core/crates/sdk-core/src/lib.rs +41 -111
  96. package/sdk-core/crates/sdk-core/src/pollers/mod.rs +4 -9
  97. package/sdk-core/crates/sdk-core/src/pollers/poll_buffer.rs +118 -19
  98. package/sdk-core/crates/sdk-core/src/protosext/mod.rs +2 -2
  99. package/sdk-core/crates/sdk-core/src/replay/mod.rs +14 -5
  100. package/sdk-core/crates/sdk-core/src/telemetry/metrics.rs +179 -196
  101. package/sdk-core/crates/sdk-core/src/telemetry/mod.rs +3 -280
  102. package/sdk-core/crates/sdk-core/src/test_help/integ_helpers.rs +6 -9
  103. package/sdk-core/crates/sdk-core/src/test_help/unit_helpers.rs +3 -6
  104. package/sdk-core/crates/sdk-core/src/worker/activities/local_activities.rs +11 -14
  105. package/sdk-core/crates/sdk-core/src/worker/activities.rs +16 -19
  106. package/sdk-core/crates/sdk-core/src/worker/client/mocks.rs +9 -5
  107. package/sdk-core/crates/sdk-core/src/worker/client.rs +103 -81
  108. package/sdk-core/crates/sdk-core/src/worker/heartbeat.rs +7 -11
  109. package/sdk-core/crates/sdk-core/src/worker/mod.rs +1124 -229
  110. package/sdk-core/crates/sdk-core/src/worker/nexus.rs +145 -23
  111. package/sdk-core/crates/sdk-core/src/worker/slot_provider.rs +2 -2
  112. package/sdk-core/crates/sdk-core/src/worker/tuner/fixed_size.rs +2 -2
  113. package/sdk-core/crates/sdk-core/src/worker/tuner/resource_based.rs +13 -13
  114. package/sdk-core/crates/sdk-core/src/worker/tuner.rs +28 -8
  115. package/sdk-core/crates/sdk-core/src/worker/workflow/driven_workflow.rs +9 -3
  116. package/sdk-core/crates/sdk-core/src/worker/workflow/machines/upsert_search_attributes_state_machine.rs +21 -22
  117. package/sdk-core/crates/sdk-core/src/worker/workflow/machines/workflow_machines.rs +19 -4
  118. package/sdk-core/crates/sdk-core/src/worker/workflow/managed_run.rs +14 -18
  119. package/sdk-core/crates/sdk-core/src/worker/workflow/mod.rs +4 -6
  120. package/sdk-core/crates/sdk-core/src/worker/workflow/run_cache.rs +4 -7
  121. package/sdk-core/crates/sdk-core/src/worker/workflow/wft_extraction.rs +2 -4
  122. package/sdk-core/crates/sdk-core/src/worker/workflow/wft_poller.rs +8 -9
  123. package/sdk-core/crates/sdk-core/src/worker/workflow/workflow_stream.rs +1 -3
  124. package/sdk-core/crates/sdk-core/tests/activities_procmacro.rs +6 -0
  125. package/sdk-core/crates/sdk-core/tests/activities_trybuild/basic_pass.rs +54 -0
  126. package/sdk-core/crates/sdk-core/tests/activities_trybuild/invalid_self_type_fail.rs +18 -0
  127. package/sdk-core/crates/sdk-core/tests/activities_trybuild/invalid_self_type_fail.stderr +5 -0
  128. package/sdk-core/crates/sdk-core/tests/activities_trybuild/missing_context_fail.rs +14 -0
  129. package/sdk-core/crates/sdk-core/tests/activities_trybuild/missing_context_fail.stderr +5 -0
  130. package/sdk-core/crates/sdk-core/tests/activities_trybuild/multi_arg_pass.rs +48 -0
  131. package/sdk-core/crates/sdk-core/tests/activities_trybuild/no_input_pass.rs +14 -0
  132. package/sdk-core/crates/sdk-core/tests/activities_trybuild/no_return_type_pass.rs +19 -0
  133. package/sdk-core/crates/sdk-core/tests/cloud_tests.rs +14 -5
  134. package/sdk-core/crates/sdk-core/tests/common/activity_functions.rs +55 -0
  135. package/sdk-core/crates/sdk-core/tests/common/mod.rs +241 -196
  136. package/sdk-core/crates/sdk-core/tests/common/workflows.rs +41 -28
  137. package/sdk-core/crates/sdk-core/tests/global_metric_tests.rs +3 -5
  138. package/sdk-core/crates/sdk-core/tests/heavy_tests/fuzzy_workflow.rs +73 -64
  139. package/sdk-core/crates/sdk-core/tests/heavy_tests.rs +298 -252
  140. package/sdk-core/crates/sdk-core/tests/integ_tests/async_activity_client_tests.rs +230 -0
  141. package/sdk-core/crates/sdk-core/tests/integ_tests/client_tests.rs +94 -57
  142. package/sdk-core/crates/sdk-core/tests/integ_tests/data_converter_tests.rs +381 -0
  143. package/sdk-core/crates/sdk-core/tests/integ_tests/ephemeral_server_tests.rs +16 -12
  144. package/sdk-core/crates/sdk-core/tests/integ_tests/heartbeat_tests.rs +48 -40
  145. package/sdk-core/crates/sdk-core/tests/integ_tests/metrics_tests.rs +327 -255
  146. package/sdk-core/crates/sdk-core/tests/integ_tests/pagination_tests.rs +50 -45
  147. package/sdk-core/crates/sdk-core/tests/integ_tests/polling_tests.rs +147 -126
  148. package/sdk-core/crates/sdk-core/tests/integ_tests/queries_tests.rs +103 -89
  149. package/sdk-core/crates/sdk-core/tests/integ_tests/update_tests.rs +609 -453
  150. package/sdk-core/crates/sdk-core/tests/integ_tests/visibility_tests.rs +80 -62
  151. package/sdk-core/crates/sdk-core/tests/integ_tests/worker_heartbeat_tests.rs +360 -231
  152. package/sdk-core/crates/sdk-core/tests/integ_tests/worker_tests.rs +248 -185
  153. package/sdk-core/crates/sdk-core/tests/integ_tests/worker_versioning_tests.rs +52 -43
  154. package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_client_tests.rs +180 -0
  155. package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_tests/activities.rs +428 -315
  156. package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_tests/cancel_external.rs +82 -56
  157. package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_tests/cancel_wf.rs +56 -28
  158. package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_tests/child_workflows.rs +364 -243
  159. package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_tests/client_interactions.rs +552 -0
  160. package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_tests/continue_as_new.rs +101 -42
  161. package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_tests/determinism.rs +243 -147
  162. package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_tests/eager.rs +98 -28
  163. package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_tests/local_activities.rs +1475 -1036
  164. package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_tests/modify_wf_properties.rs +73 -41
  165. package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_tests/nexus.rs +397 -238
  166. package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_tests/patches.rs +414 -189
  167. package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_tests/queries.rs +415 -0
  168. package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_tests/replay.rs +96 -36
  169. package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_tests/resets.rs +154 -137
  170. package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_tests/signals.rs +183 -105
  171. package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_tests/stickyness.rs +85 -38
  172. package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_tests/timers.rs +142 -40
  173. package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_tests/upsert_search_attrs.rs +73 -54
  174. package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_tests.rs +363 -226
  175. package/sdk-core/crates/sdk-core/tests/main.rs +17 -15
  176. package/sdk-core/crates/sdk-core/tests/manual_tests.rs +207 -152
  177. package/sdk-core/crates/sdk-core/tests/shared_tests/mod.rs +65 -34
  178. package/sdk-core/crates/sdk-core/tests/shared_tests/priority.rs +107 -84
  179. package/sdk-core/crates/sdk-core/tests/workflows_procmacro.rs +6 -0
  180. package/sdk-core/crates/sdk-core/tests/workflows_trybuild/async_query_fail.rs +26 -0
  181. package/sdk-core/crates/sdk-core/tests/workflows_trybuild/async_query_fail.stderr +5 -0
  182. package/sdk-core/crates/sdk-core/tests/workflows_trybuild/basic_pass.rs +49 -0
  183. package/sdk-core/crates/sdk-core/tests/workflows_trybuild/minimal_pass.rs +21 -0
  184. package/sdk-core/crates/sdk-core/tests/workflows_trybuild/mut_query_fail.rs +26 -0
  185. package/sdk-core/crates/sdk-core/tests/workflows_trybuild/mut_query_fail.stderr +5 -0
  186. package/sdk-core/crates/sdk-core/tests/workflows_trybuild/sync_run_fail.rs +21 -0
  187. package/sdk-core/crates/sdk-core/tests/workflows_trybuild/sync_run_fail.stderr +5 -0
  188. package/sdk-core/crates/sdk-core-c-bridge/Cargo.toml +7 -1
  189. package/sdk-core/crates/sdk-core-c-bridge/include/temporal-sdk-core-c-bridge.h +14 -14
  190. package/sdk-core/crates/sdk-core-c-bridge/src/client.rs +83 -74
  191. package/sdk-core/crates/sdk-core-c-bridge/src/metric.rs +9 -14
  192. package/sdk-core/crates/sdk-core-c-bridge/src/runtime.rs +1 -2
  193. package/sdk-core/crates/sdk-core-c-bridge/src/tests/context.rs +13 -13
  194. package/sdk-core/crates/sdk-core-c-bridge/src/tests/mod.rs +6 -6
  195. package/sdk-core/crates/sdk-core-c-bridge/src/tests/utils.rs +3 -4
  196. package/sdk-core/crates/sdk-core-c-bridge/src/worker.rs +62 -75
  197. package/sdk-core/rustfmt.toml +2 -1
  198. package/src/client.rs +205 -318
  199. package/src/metrics.rs +22 -30
  200. package/src/runtime.rs +4 -5
  201. package/src/worker.rs +16 -19
  202. package/ts/native.ts +1 -1
  203. package/sdk-core/crates/client/src/workflow_handle/mod.rs +0 -212
  204. package/sdk-core/crates/common/src/errors.rs +0 -85
  205. package/sdk-core/crates/common/tests/worker_task_types_test.rs +0 -129
  206. package/sdk-core/crates/sdk/src/activity_context.rs +0 -238
  207. package/sdk-core/crates/sdk/src/app_data.rs +0 -37
  208. package/sdk-core/crates/sdk-core/tests/integ_tests/activity_functions.rs +0 -5
  209. package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_tests/appdata_propagation.rs +0 -61
@@ -1,101 +1,127 @@
1
1
  use crate::common::{CoreWfStarter, build_fake_sdk};
2
- use temporalio_client::{GetWorkflowResultOptions, WfClientExt, WorkflowOptions};
2
+ use temporalio_client::{
3
+ NamespacedClient, WorkflowExecutionInfo, WorkflowGetResultOptions, WorkflowStartOptions,
4
+ };
3
5
  use temporalio_common::{
4
6
  protos::{
5
7
  DEFAULT_WORKFLOW_TYPE, TestHistoryBuilder,
6
- coresdk::{FromJsonPayloadExt, common::NamespacedWorkflowExecution},
8
+ coresdk::{AsJsonPayloadExt, FromJsonPayloadExt, common::NamespacedWorkflowExecution},
7
9
  temporal::api::enums::v1::{CommandType, EventType},
8
10
  },
9
11
  worker::WorkerTaskTypes,
10
12
  };
11
- use temporalio_sdk::{WfContext, WorkflowResult};
13
+ use temporalio_macros::{workflow, workflow_methods};
14
+ use temporalio_sdk::{WorkflowContext, WorkflowResult};
12
15
  use temporalio_sdk_core::test_help::MockPollCfg;
13
16
 
14
17
  const RECEIVER_WFID: &str = "sends-cancel-receiver";
15
18
 
16
- async fn cancel_sender(ctx: WfContext) -> WorkflowResult<()> {
17
- let run_id = std::str::from_utf8(&ctx.get_args()[0].data)?.to_owned();
18
- let sigres = ctx
19
- .cancel_external(
20
- NamespacedWorkflowExecution {
21
- workflow_id: RECEIVER_WFID.to_string(),
22
- run_id,
23
- namespace: ctx.namespace().to_string(),
24
- },
25
- "cancel-reason".to_string(),
26
- )
27
- .await;
28
- if ctx.get_args().get(1).is_some() {
29
- // We expect failure
30
- assert!(sigres.is_err());
31
- } else {
19
+ #[workflow]
20
+ #[derive(Default)]
21
+ struct CancelSender;
22
+
23
+ #[workflow_methods]
24
+ impl CancelSender {
25
+ #[run]
26
+ async fn run(ctx: &mut WorkflowContext<Self>, run_id: String) -> WorkflowResult<()> {
27
+ let sigres = ctx
28
+ .cancel_external(
29
+ NamespacedWorkflowExecution {
30
+ workflow_id: RECEIVER_WFID.to_string(),
31
+ run_id,
32
+ namespace: ctx.namespace().to_string(),
33
+ },
34
+ "cancel-reason".to_string(),
35
+ )
36
+ .await;
32
37
  sigres.unwrap();
38
+ Ok(())
33
39
  }
34
- Ok(().into())
35
40
  }
36
41
 
37
- async fn cancel_receiver(ctx: WfContext) -> WorkflowResult<String> {
38
- let r = ctx.cancelled().await;
39
- Ok(r.into())
42
+ #[workflow]
43
+ #[derive(Default)]
44
+ struct CancelReceiver;
45
+
46
+ #[workflow_methods]
47
+ impl CancelReceiver {
48
+ #[run]
49
+ async fn run(ctx: &mut WorkflowContext<Self>) -> WorkflowResult<String> {
50
+ let r = ctx.cancelled().await;
51
+ Ok(r)
52
+ }
40
53
  }
41
54
 
42
55
  #[tokio::test]
43
56
  async fn sends_cancel_to_other_wf() {
44
57
  let mut starter = CoreWfStarter::new("sends_cancel_to_other_wf");
45
- starter.worker_config.task_types = WorkerTaskTypes::workflow_only();
58
+ starter.sdk_config.task_types = WorkerTaskTypes::workflow_only();
46
59
  let mut worker = starter.worker().await;
47
- worker.register_wf("sender", cancel_sender);
48
- worker.register_wf("receiver", cancel_receiver);
60
+ worker.register_workflow::<CancelSender>();
61
+ worker.register_workflow::<CancelReceiver>();
49
62
 
63
+ let task_queue = starter.get_task_queue().to_owned();
50
64
  let receiver_run_id = worker
51
65
  .submit_wf(
52
- RECEIVER_WFID,
53
- "receiver",
54
- vec![],
55
- WorkflowOptions::default(),
66
+ "CancelReceiver",
67
+ vec![().as_json_payload().unwrap()],
68
+ WorkflowStartOptions::new(task_queue.clone(), RECEIVER_WFID).build(),
56
69
  )
57
70
  .await
58
71
  .unwrap();
59
72
  worker
60
73
  .submit_wf(
61
- "sends-cancel-sender",
62
- "sender",
63
- vec![receiver_run_id.clone().into()],
64
- WorkflowOptions::default(),
74
+ "CancelSender",
75
+ vec![receiver_run_id.clone().as_json_payload().unwrap()],
76
+ WorkflowStartOptions::new(task_queue, "sends-cancel-sender").build(),
65
77
  )
66
78
  .await
67
79
  .unwrap();
68
80
  worker.run_until_done().await.unwrap();
69
- let h = starter
70
- .get_client()
71
- .await
72
- .get_untyped_workflow_handle(RECEIVER_WFID, receiver_run_id);
81
+ let client = starter.get_client().await;
82
+ let h = WorkflowExecutionInfo {
83
+ namespace: client.namespace(),
84
+ workflow_id: RECEIVER_WFID.into(),
85
+ run_id: Some(receiver_run_id),
86
+ first_execution_run_id: None,
87
+ }
88
+ .bind_untyped(client.clone());
73
89
  let res = String::from_json_payload(
74
- &h.get_workflow_result(GetWorkflowResultOptions::default())
90
+ h.get_result(WorkflowGetResultOptions::default())
75
91
  .await
76
92
  .unwrap()
77
- .unwrap_success()[0],
93
+ .payloads
94
+ .first()
95
+ .unwrap(),
78
96
  )
79
97
  .unwrap();
80
98
  assert!(res.contains("Cancel requested by workflow"));
81
99
  assert!(res.contains("cancel-reason"));
82
100
  }
83
101
 
84
- async fn cancel_sender_canned(ctx: WfContext) -> WorkflowResult<()> {
85
- let res = ctx
86
- .cancel_external(
87
- NamespacedWorkflowExecution {
88
- namespace: "some_namespace".to_string(),
89
- workflow_id: "fake_wid".to_string(),
90
- run_id: "fake_rid".to_string(),
91
- },
92
- "cancel reason".to_string(),
93
- )
94
- .await;
95
- if res.is_err() {
96
- Err(anyhow::anyhow!("Cancel fail!"))
97
- } else {
98
- Ok(().into())
102
+ #[workflow]
103
+ #[derive(Default)]
104
+ struct CancelSenderCanned;
105
+
106
+ #[workflow_methods]
107
+ impl CancelSenderCanned {
108
+ #[run(name = DEFAULT_WORKFLOW_TYPE)]
109
+ async fn run(ctx: &mut WorkflowContext<Self>) -> WorkflowResult<()> {
110
+ let res = ctx
111
+ .cancel_external(
112
+ NamespacedWorkflowExecution {
113
+ namespace: "some_namespace".to_string(),
114
+ workflow_id: "fake_wid".to_string(),
115
+ run_id: "fake_rid".to_string(),
116
+ },
117
+ "cancel reason".to_string(),
118
+ )
119
+ .await;
120
+ if res.is_err() {
121
+ Err(anyhow::anyhow!("Cancel fail!").into())
122
+ } else {
123
+ Ok(())
124
+ }
99
125
  }
100
126
  }
101
127
 
@@ -148,6 +174,6 @@ async fn sends_cancel_canned(#[case] fails: bool) {
148
174
  });
149
175
  });
150
176
  let mut worker = build_fake_sdk(mock_cfg);
151
- worker.register_wf(DEFAULT_WORKFLOW_TYPE, cancel_sender_canned);
177
+ worker.register_workflow::<CancelSenderCanned>();
152
178
  worker.run().await.unwrap();
153
179
  }
@@ -1,6 +1,8 @@
1
1
  use crate::common::{ActivationAssertionsInterceptor, CoreWfStarter, build_fake_sdk};
2
2
  use std::time::Duration;
3
- use temporalio_client::WorkflowClientTrait;
3
+ use temporalio_client::{
4
+ UntypedWorkflow, WorkflowCancelOptions, WorkflowDescribeOptions, WorkflowStartOptions,
5
+ };
4
6
  use temporalio_common::{
5
7
  protos::{
6
8
  DEFAULT_WORKFLOW_TYPE, canned_histories,
@@ -9,25 +11,34 @@ use temporalio_common::{
9
11
  },
10
12
  worker::WorkerTaskTypes,
11
13
  };
12
- use temporalio_sdk::{WfContext, WfExitValue, WorkflowResult};
14
+ use temporalio_macros::{workflow, workflow_methods};
15
+ use temporalio_sdk::{WorkflowContext, WorkflowResult, WorkflowTermination};
13
16
  use temporalio_sdk_core::test_help::MockPollCfg;
14
17
 
15
- async fn cancelled_wf(ctx: WfContext) -> WorkflowResult<()> {
16
- let mut reason = "".to_string();
17
- let cancelled = tokio::select! {
18
- _ = ctx.timer(Duration::from_secs(500)) => false,
19
- r = ctx.cancelled() => {
20
- reason = r;
21
- true
22
- }
23
- };
18
+ #[workflow]
19
+ #[derive(Default)]
20
+ struct CancelledWf;
24
21
 
25
- assert_eq!(reason, "Dieee");
22
+ #[workflow_methods]
23
+ impl CancelledWf {
24
+ #[run]
25
+ async fn run(ctx: &mut WorkflowContext<Self>) -> WorkflowResult<()> {
26
+ let mut reason = "".to_string();
27
+ let cancelled = temporalio_sdk::workflows::select! {
28
+ _ = ctx.timer(Duration::from_secs(500)) => false,
29
+ r = ctx.cancelled() => {
30
+ reason = r;
31
+ true
32
+ }
33
+ };
26
34
 
27
- if cancelled {
28
- Ok(WfExitValue::Cancelled)
29
- } else {
30
- panic!("Should have been cancelled")
35
+ assert_eq!(reason, "Dieee");
36
+
37
+ if cancelled {
38
+ Err(WorkflowTermination::Cancelled)
39
+ } else {
40
+ panic!("Should have been cancelled")
41
+ }
31
42
  }
32
43
  }
33
44
 
@@ -35,18 +46,26 @@ async fn cancelled_wf(ctx: WfContext) -> WorkflowResult<()> {
35
46
  async fn cancel_during_timer() {
36
47
  let wf_name = "cancel_during_timer";
37
48
  let mut starter = CoreWfStarter::new(wf_name);
38
- starter.worker_config.task_types = WorkerTaskTypes::workflow_only();
49
+ starter.sdk_config.task_types = WorkerTaskTypes::workflow_only();
39
50
  let mut worker = starter.worker().await;
40
51
  let client = starter.get_client().await;
41
- worker.register_wf(wf_name.to_string(), cancelled_wf);
42
- starter.start_with_worker(wf_name, &mut worker).await;
43
- let wf_id = starter.get_task_queue().to_string();
52
+ worker.register_workflow::<CancelledWf>();
53
+ let task_queue = starter.get_task_queue().to_owned();
54
+ let wf_id = task_queue.clone();
55
+ let wf_handle = worker
56
+ .submit_workflow(
57
+ CancelledWf::run,
58
+ (),
59
+ WorkflowStartOptions::new(task_queue, wf_id.clone()).build(),
60
+ )
61
+ .await
62
+ .unwrap();
44
63
 
45
64
  let canceller = async {
46
65
  tokio::time::sleep(Duration::from_millis(500)).await;
47
66
  // Cancel the workflow externally
48
- client
49
- .cancel_workflow_execution(wf_id.clone(), None, "Dieee".to_string(), None)
67
+ wf_handle
68
+ .cancel(WorkflowCancelOptions::builder().reason("Dieee").build())
50
69
  .await
51
70
  .unwrap();
52
71
  };
@@ -54,19 +73,28 @@ async fn cancel_during_timer() {
54
73
  let (_, res) = tokio::join!(canceller, worker.run_until_done());
55
74
  res.unwrap();
56
75
  let desc = client
57
- .describe_workflow_execution(wf_id, None)
76
+ .get_workflow_handle::<UntypedWorkflow>(wf_id)
77
+ .describe(WorkflowDescribeOptions::default())
58
78
  .await
59
79
  .unwrap();
60
80
 
61
81
  assert_eq!(
62
- desc.workflow_execution_info.unwrap().status,
82
+ desc.raw_description.workflow_execution_info.unwrap().status,
63
83
  WorkflowExecutionStatus::Canceled as i32
64
84
  );
65
85
  }
66
86
 
67
- async fn wf_with_timer(ctx: WfContext) -> WorkflowResult<()> {
68
- ctx.timer(Duration::from_millis(500)).await;
69
- Ok(WfExitValue::Cancelled)
87
+ #[workflow]
88
+ #[derive(Default)]
89
+ struct WfWithTimer;
90
+
91
+ #[workflow_methods]
92
+ impl WfWithTimer {
93
+ #[run(name = DEFAULT_WORKFLOW_TYPE)]
94
+ async fn run(ctx: &mut WorkflowContext<Self>) -> WorkflowResult<()> {
95
+ ctx.timer(Duration::from_millis(500)).await;
96
+ Err(WorkflowTermination::Cancelled)
97
+ }
70
98
  }
71
99
 
72
100
  #[tokio::test]
@@ -113,7 +141,7 @@ async fn wf_completing_with_cancelled() {
113
141
  });
114
142
 
115
143
  let mut worker = build_fake_sdk(mock_cfg);
116
- worker.register_wf(DEFAULT_WORKFLOW_TYPE, wf_with_timer);
144
+ worker.register_workflow::<WfWithTimer>();
117
145
  worker.set_worker_interceptor(aai);
118
146
  worker.run().await.unwrap();
119
147
  }