temporalio 0.4.0 → 0.5.0

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 (138) hide show
  1. checksums.yaml +4 -4
  2. data/.yardopts +1 -1
  3. data/Cargo.lock +679 -437
  4. data/Cargo.toml +5 -5
  5. data/README.md +98 -34
  6. data/ext/Cargo.toml +3 -3
  7. data/lib/temporalio/activity/cancellation_details.rb +58 -0
  8. data/lib/temporalio/activity/context.rb +10 -1
  9. data/lib/temporalio/activity/definition.rb +41 -3
  10. data/lib/temporalio/activity/info.rb +25 -4
  11. data/lib/temporalio/activity.rb +2 -0
  12. data/lib/temporalio/api/activity/v1/message.rb +1 -1
  13. data/lib/temporalio/api/batch/v1/message.rb +4 -2
  14. data/lib/temporalio/api/cloud/account/v1/message.rb +1 -1
  15. data/lib/temporalio/api/cloud/cloudservice/v1/request_response.rb +11 -2
  16. data/lib/temporalio/api/cloud/cloudservice/v1/service.rb +2 -2
  17. data/lib/temporalio/api/cloud/identity/v1/message.rb +7 -2
  18. data/lib/temporalio/api/cloud/namespace/v1/message.rb +6 -2
  19. data/lib/temporalio/api/cloud/nexus/v1/message.rb +3 -2
  20. data/lib/temporalio/api/cloud/operation/v1/message.rb +1 -1
  21. data/lib/temporalio/api/cloud/region/v1/message.rb +1 -1
  22. data/lib/temporalio/api/cloud/resource/v1/message.rb +1 -1
  23. data/lib/temporalio/api/cloud/sink/v1/message.rb +1 -1
  24. data/lib/temporalio/api/cloud/usage/v1/message.rb +1 -1
  25. data/lib/temporalio/api/command/v1/message.rb +2 -2
  26. data/lib/temporalio/api/common/v1/grpc_status.rb +1 -1
  27. data/lib/temporalio/api/common/v1/message.rb +3 -2
  28. data/lib/temporalio/api/deployment/v1/message.rb +3 -2
  29. data/lib/temporalio/api/enums/v1/batch_operation.rb +1 -1
  30. data/lib/temporalio/api/enums/v1/command_type.rb +1 -1
  31. data/lib/temporalio/api/enums/v1/common.rb +5 -2
  32. data/lib/temporalio/api/enums/v1/deployment.rb +3 -2
  33. data/lib/temporalio/api/enums/v1/event_type.rb +2 -2
  34. data/lib/temporalio/api/enums/v1/failed_cause.rb +2 -2
  35. data/lib/temporalio/api/enums/v1/namespace.rb +1 -1
  36. data/lib/temporalio/api/enums/v1/nexus.rb +1 -1
  37. data/lib/temporalio/api/enums/v1/query.rb +1 -1
  38. data/lib/temporalio/api/enums/v1/reset.rb +1 -1
  39. data/lib/temporalio/api/enums/v1/schedule.rb +1 -1
  40. data/lib/temporalio/api/enums/v1/task_queue.rb +1 -1
  41. data/lib/temporalio/api/enums/v1/update.rb +1 -1
  42. data/lib/temporalio/api/enums/v1/workflow.rb +2 -2
  43. data/lib/temporalio/api/errordetails/v1/message.rb +1 -1
  44. data/lib/temporalio/api/export/v1/message.rb +1 -1
  45. data/lib/temporalio/api/failure/v1/message.rb +3 -2
  46. data/lib/temporalio/api/filter/v1/message.rb +1 -1
  47. data/lib/temporalio/api/history/v1/message.rb +4 -2
  48. data/lib/temporalio/api/namespace/v1/message.rb +1 -1
  49. data/lib/temporalio/api/nexus/v1/message.rb +2 -2
  50. data/lib/temporalio/api/operatorservice/v1/request_response.rb +1 -1
  51. data/lib/temporalio/api/operatorservice/v1/service.rb +1 -1
  52. data/lib/temporalio/api/payload_visitor.rb +87 -0
  53. data/lib/temporalio/api/protocol/v1/message.rb +1 -1
  54. data/lib/temporalio/api/query/v1/message.rb +1 -1
  55. data/lib/temporalio/api/replication/v1/message.rb +1 -1
  56. data/lib/temporalio/api/rules/v1/message.rb +27 -0
  57. data/lib/temporalio/api/schedule/v1/message.rb +2 -2
  58. data/lib/temporalio/api/sdk/v1/enhanced_stack_trace.rb +1 -1
  59. data/lib/temporalio/api/sdk/v1/task_complete_metadata.rb +1 -1
  60. data/lib/temporalio/api/sdk/v1/user_metadata.rb +1 -1
  61. data/lib/temporalio/api/sdk/v1/workflow_metadata.rb +1 -1
  62. data/lib/temporalio/api/taskqueue/v1/message.rb +2 -2
  63. data/lib/temporalio/api/testservice/v1/request_response.rb +1 -1
  64. data/lib/temporalio/api/testservice/v1/service.rb +1 -1
  65. data/lib/temporalio/api/update/v1/message.rb +1 -1
  66. data/lib/temporalio/api/version/v1/message.rb +1 -1
  67. data/lib/temporalio/api/worker/v1/message.rb +30 -0
  68. data/lib/temporalio/api/workflow/v1/message.rb +14 -2
  69. data/lib/temporalio/api/workflowservice/v1/request_response.rb +19 -2
  70. data/lib/temporalio/api/workflowservice/v1/service.rb +2 -2
  71. data/lib/temporalio/client/async_activity_handle.rb +12 -4
  72. data/lib/temporalio/client/connection/cloud_service.rb +60 -0
  73. data/lib/temporalio/client/connection/workflow_service.rb +105 -0
  74. data/lib/temporalio/client/interceptor.rb +25 -7
  75. data/lib/temporalio/client/schedule.rb +10 -2
  76. data/lib/temporalio/client/with_start_workflow_operation.rb +9 -1
  77. data/lib/temporalio/client/workflow_handle.rb +50 -10
  78. data/lib/temporalio/client/workflow_update_handle.rb +9 -3
  79. data/lib/temporalio/client.rb +110 -6
  80. data/lib/temporalio/common_enums.rb +14 -0
  81. data/lib/temporalio/contrib/open_telemetry.rb +13 -9
  82. data/lib/temporalio/converters/data_converter.rb +18 -8
  83. data/lib/temporalio/converters/failure_converter.rb +6 -3
  84. data/lib/temporalio/converters/payload_converter/binary_null.rb +2 -2
  85. data/lib/temporalio/converters/payload_converter/binary_plain.rb +2 -2
  86. data/lib/temporalio/converters/payload_converter/binary_protobuf.rb +2 -2
  87. data/lib/temporalio/converters/payload_converter/composite.rb +6 -4
  88. data/lib/temporalio/converters/payload_converter/encoding.rb +4 -2
  89. data/lib/temporalio/converters/payload_converter/json_plain.rb +2 -2
  90. data/lib/temporalio/converters/payload_converter/json_protobuf.rb +2 -2
  91. data/lib/temporalio/converters/payload_converter.rb +16 -6
  92. data/lib/temporalio/error/failure.rb +19 -1
  93. data/lib/temporalio/error.rb +1 -1
  94. data/lib/temporalio/internal/bridge/api/activity_result/activity_result.rb +1 -1
  95. data/lib/temporalio/internal/bridge/api/activity_task/activity_task.rb +3 -2
  96. data/lib/temporalio/internal/bridge/api/child_workflow/child_workflow.rb +1 -1
  97. data/lib/temporalio/internal/bridge/api/common/common.rb +1 -1
  98. data/lib/temporalio/internal/bridge/api/core_interface.rb +1 -1
  99. data/lib/temporalio/internal/bridge/api/external_data/external_data.rb +1 -1
  100. data/lib/temporalio/internal/bridge/api/nexus/nexus.rb +3 -2
  101. data/lib/temporalio/internal/bridge/api/workflow_activation/workflow_activation.rb +2 -2
  102. data/lib/temporalio/internal/bridge/api/workflow_commands/workflow_commands.rb +3 -2
  103. data/lib/temporalio/internal/bridge/api/workflow_completion/workflow_completion.rb +1 -1
  104. data/lib/temporalio/internal/bridge/worker.rb +28 -4
  105. data/lib/temporalio/internal/bridge.rb +1 -1
  106. data/lib/temporalio/internal/client/implementation.rb +60 -52
  107. data/lib/temporalio/internal/proto_utils.rb +4 -4
  108. data/lib/temporalio/internal/worker/activity_worker.rb +93 -20
  109. data/lib/temporalio/internal/worker/workflow_instance/child_workflow_handle.rb +8 -6
  110. data/lib/temporalio/internal/worker/workflow_instance/context.rb +65 -24
  111. data/lib/temporalio/internal/worker/workflow_instance/details.rb +5 -2
  112. data/lib/temporalio/internal/worker/workflow_instance/external_workflow_handle.rb +2 -2
  113. data/lib/temporalio/internal/worker/workflow_instance/illegal_call_tracer.rb +64 -18
  114. data/lib/temporalio/internal/worker/workflow_instance/outbound_implementation.rb +28 -14
  115. data/lib/temporalio/internal/worker/workflow_instance.rb +58 -23
  116. data/lib/temporalio/internal/worker/workflow_worker.rb +16 -6
  117. data/lib/temporalio/priority.rb +59 -0
  118. data/lib/temporalio/testing/activity_environment.rb +17 -2
  119. data/lib/temporalio/testing/workflow_environment.rb +3 -3
  120. data/lib/temporalio/version.rb +1 -1
  121. data/lib/temporalio/versioning_override.rb +56 -0
  122. data/lib/temporalio/worker/deployment_options.rb +45 -0
  123. data/lib/temporalio/worker/illegal_workflow_call_validator.rb +64 -0
  124. data/lib/temporalio/worker/interceptor.rb +13 -1
  125. data/lib/temporalio/worker/poller_behavior.rb +61 -0
  126. data/lib/temporalio/worker/thread_pool.rb +1 -1
  127. data/lib/temporalio/worker/workflow_executor/thread_pool.rb +2 -1
  128. data/lib/temporalio/worker/workflow_replayer.rb +12 -13
  129. data/lib/temporalio/worker.rb +63 -27
  130. data/lib/temporalio/worker_deployment_version.rb +67 -0
  131. data/lib/temporalio/workflow/child_workflow_handle.rb +10 -2
  132. data/lib/temporalio/workflow/definition.rb +183 -33
  133. data/lib/temporalio/workflow/external_workflow_handle.rb +3 -1
  134. data/lib/temporalio/workflow/info.rb +4 -1
  135. data/lib/temporalio/workflow.rb +61 -9
  136. data/lib/temporalio.rb +1 -0
  137. data/temporalio.gemspec +1 -0
  138. metadata +12 -3
@@ -241,6 +241,21 @@ module Temporalio
241
241
  )
242
242
  end
243
243
 
244
+ # Calls CloudService.DeleteNamespaceRegion API call.
245
+ #
246
+ # @param request [Temporalio::Api::Cloud::CloudService::V1::DeleteNamespaceRegionRequest] API request.
247
+ # @param rpc_options [RPCOptions, nil] Advanced RPC options.
248
+ # @return [Temporalio::Api::Cloud::CloudService::V1::DeleteNamespaceRegionResponse] API response.
249
+ def delete_namespace_region(request, rpc_options: nil)
250
+ invoke_rpc(
251
+ rpc: 'delete_namespace_region',
252
+ request_class: Temporalio::Api::Cloud::CloudService::V1::DeleteNamespaceRegionRequest,
253
+ response_class: Temporalio::Api::Cloud::CloudService::V1::DeleteNamespaceRegionResponse,
254
+ request:,
255
+ rpc_options:
256
+ )
257
+ end
258
+
244
259
  # Calls CloudService.GetRegions API call.
245
260
  #
246
261
  # @param request [Temporalio::Api::Cloud::CloudService::V1::GetRegionsRequest] API request.
@@ -511,6 +526,51 @@ module Temporalio
511
526
  )
512
527
  end
513
528
 
529
+ # Calls CloudService.AddUserGroupMember API call.
530
+ #
531
+ # @param request [Temporalio::Api::Cloud::CloudService::V1::AddUserGroupMemberRequest] API request.
532
+ # @param rpc_options [RPCOptions, nil] Advanced RPC options.
533
+ # @return [Temporalio::Api::Cloud::CloudService::V1::AddUserGroupMemberResponse] API response.
534
+ def add_user_group_member(request, rpc_options: nil)
535
+ invoke_rpc(
536
+ rpc: 'add_user_group_member',
537
+ request_class: Temporalio::Api::Cloud::CloudService::V1::AddUserGroupMemberRequest,
538
+ response_class: Temporalio::Api::Cloud::CloudService::V1::AddUserGroupMemberResponse,
539
+ request:,
540
+ rpc_options:
541
+ )
542
+ end
543
+
544
+ # Calls CloudService.RemoveUserGroupMember API call.
545
+ #
546
+ # @param request [Temporalio::Api::Cloud::CloudService::V1::RemoveUserGroupMemberRequest] API request.
547
+ # @param rpc_options [RPCOptions, nil] Advanced RPC options.
548
+ # @return [Temporalio::Api::Cloud::CloudService::V1::RemoveUserGroupMemberResponse] API response.
549
+ def remove_user_group_member(request, rpc_options: nil)
550
+ invoke_rpc(
551
+ rpc: 'remove_user_group_member',
552
+ request_class: Temporalio::Api::Cloud::CloudService::V1::RemoveUserGroupMemberRequest,
553
+ response_class: Temporalio::Api::Cloud::CloudService::V1::RemoveUserGroupMemberResponse,
554
+ request:,
555
+ rpc_options:
556
+ )
557
+ end
558
+
559
+ # Calls CloudService.GetUserGroupMembers API call.
560
+ #
561
+ # @param request [Temporalio::Api::Cloud::CloudService::V1::GetUserGroupMembersRequest] API request.
562
+ # @param rpc_options [RPCOptions, nil] Advanced RPC options.
563
+ # @return [Temporalio::Api::Cloud::CloudService::V1::GetUserGroupMembersResponse] API response.
564
+ def get_user_group_members(request, rpc_options: nil)
565
+ invoke_rpc(
566
+ rpc: 'get_user_group_members',
567
+ request_class: Temporalio::Api::Cloud::CloudService::V1::GetUserGroupMembersRequest,
568
+ response_class: Temporalio::Api::Cloud::CloudService::V1::GetUserGroupMembersResponse,
569
+ request:,
570
+ rpc_options:
571
+ )
572
+ end
573
+
514
574
  # Calls CloudService.CreateServiceAccount API call.
515
575
  #
516
576
  # @param request [Temporalio::Api::Cloud::CloudService::V1::CreateServiceAccountRequest] API request.
@@ -1245,6 +1245,111 @@ module Temporalio
1245
1245
  rpc_options:
1246
1246
  )
1247
1247
  end
1248
+
1249
+ # Calls WorkflowService.CreateWorkflowRule API call.
1250
+ #
1251
+ # @param request [Temporalio::Api::WorkflowService::V1::CreateWorkflowRuleRequest] API request.
1252
+ # @param rpc_options [RPCOptions, nil] Advanced RPC options.
1253
+ # @return [Temporalio::Api::WorkflowService::V1::CreateWorkflowRuleResponse] API response.
1254
+ def create_workflow_rule(request, rpc_options: nil)
1255
+ invoke_rpc(
1256
+ rpc: 'create_workflow_rule',
1257
+ request_class: Temporalio::Api::WorkflowService::V1::CreateWorkflowRuleRequest,
1258
+ response_class: Temporalio::Api::WorkflowService::V1::CreateWorkflowRuleResponse,
1259
+ request:,
1260
+ rpc_options:
1261
+ )
1262
+ end
1263
+
1264
+ # Calls WorkflowService.DescribeWorkflowRule API call.
1265
+ #
1266
+ # @param request [Temporalio::Api::WorkflowService::V1::DescribeWorkflowRuleRequest] API request.
1267
+ # @param rpc_options [RPCOptions, nil] Advanced RPC options.
1268
+ # @return [Temporalio::Api::WorkflowService::V1::DescribeWorkflowRuleResponse] API response.
1269
+ def describe_workflow_rule(request, rpc_options: nil)
1270
+ invoke_rpc(
1271
+ rpc: 'describe_workflow_rule',
1272
+ request_class: Temporalio::Api::WorkflowService::V1::DescribeWorkflowRuleRequest,
1273
+ response_class: Temporalio::Api::WorkflowService::V1::DescribeWorkflowRuleResponse,
1274
+ request:,
1275
+ rpc_options:
1276
+ )
1277
+ end
1278
+
1279
+ # Calls WorkflowService.DeleteWorkflowRule API call.
1280
+ #
1281
+ # @param request [Temporalio::Api::WorkflowService::V1::DeleteWorkflowRuleRequest] API request.
1282
+ # @param rpc_options [RPCOptions, nil] Advanced RPC options.
1283
+ # @return [Temporalio::Api::WorkflowService::V1::DeleteWorkflowRuleResponse] API response.
1284
+ def delete_workflow_rule(request, rpc_options: nil)
1285
+ invoke_rpc(
1286
+ rpc: 'delete_workflow_rule',
1287
+ request_class: Temporalio::Api::WorkflowService::V1::DeleteWorkflowRuleRequest,
1288
+ response_class: Temporalio::Api::WorkflowService::V1::DeleteWorkflowRuleResponse,
1289
+ request:,
1290
+ rpc_options:
1291
+ )
1292
+ end
1293
+
1294
+ # Calls WorkflowService.ListWorkflowRules API call.
1295
+ #
1296
+ # @param request [Temporalio::Api::WorkflowService::V1::ListWorkflowRulesRequest] API request.
1297
+ # @param rpc_options [RPCOptions, nil] Advanced RPC options.
1298
+ # @return [Temporalio::Api::WorkflowService::V1::ListWorkflowRulesResponse] API response.
1299
+ def list_workflow_rules(request, rpc_options: nil)
1300
+ invoke_rpc(
1301
+ rpc: 'list_workflow_rules',
1302
+ request_class: Temporalio::Api::WorkflowService::V1::ListWorkflowRulesRequest,
1303
+ response_class: Temporalio::Api::WorkflowService::V1::ListWorkflowRulesResponse,
1304
+ request:,
1305
+ rpc_options:
1306
+ )
1307
+ end
1308
+
1309
+ # Calls WorkflowService.TriggerWorkflowRule API call.
1310
+ #
1311
+ # @param request [Temporalio::Api::WorkflowService::V1::TriggerWorkflowRuleRequest] API request.
1312
+ # @param rpc_options [RPCOptions, nil] Advanced RPC options.
1313
+ # @return [Temporalio::Api::WorkflowService::V1::TriggerWorkflowRuleResponse] API response.
1314
+ def trigger_workflow_rule(request, rpc_options: nil)
1315
+ invoke_rpc(
1316
+ rpc: 'trigger_workflow_rule',
1317
+ request_class: Temporalio::Api::WorkflowService::V1::TriggerWorkflowRuleRequest,
1318
+ response_class: Temporalio::Api::WorkflowService::V1::TriggerWorkflowRuleResponse,
1319
+ request:,
1320
+ rpc_options:
1321
+ )
1322
+ end
1323
+
1324
+ # Calls WorkflowService.RecordWorkerHeartbeat API call.
1325
+ #
1326
+ # @param request [Temporalio::Api::WorkflowService::V1::RecordWorkerHeartbeatRequest] API request.
1327
+ # @param rpc_options [RPCOptions, nil] Advanced RPC options.
1328
+ # @return [Temporalio::Api::WorkflowService::V1::RecordWorkerHeartbeatResponse] API response.
1329
+ def record_worker_heartbeat(request, rpc_options: nil)
1330
+ invoke_rpc(
1331
+ rpc: 'record_worker_heartbeat',
1332
+ request_class: Temporalio::Api::WorkflowService::V1::RecordWorkerHeartbeatRequest,
1333
+ response_class: Temporalio::Api::WorkflowService::V1::RecordWorkerHeartbeatResponse,
1334
+ request:,
1335
+ rpc_options:
1336
+ )
1337
+ end
1338
+
1339
+ # Calls WorkflowService.ListWorkers API call.
1340
+ #
1341
+ # @param request [Temporalio::Api::WorkflowService::V1::ListWorkersRequest] API request.
1342
+ # @param rpc_options [RPCOptions, nil] Advanced RPC options.
1343
+ # @return [Temporalio::Api::WorkflowService::V1::ListWorkersResponse] API response.
1344
+ def list_workers(request, rpc_options: nil)
1345
+ invoke_rpc(
1346
+ rpc: 'list_workers',
1347
+ request_class: Temporalio::Api::WorkflowService::V1::ListWorkersRequest,
1348
+ response_class: Temporalio::Api::WorkflowService::V1::ListWorkersResponse,
1349
+ request:,
1350
+ rpc_options:
1351
+ )
1352
+ end
1248
1353
  end
1249
1354
  end
1250
1355
  end
@@ -36,6 +36,10 @@ module Temporalio
36
36
  :search_attributes,
37
37
  :start_delay,
38
38
  :request_eager_start,
39
+ :versioning_override,
40
+ :priority,
41
+ :arg_hints,
42
+ :result_hint,
39
43
  :headers,
40
44
  :rpc_options
41
45
  )
@@ -47,6 +51,8 @@ module Temporalio
47
51
  :args,
48
52
  :wait_for_stage,
49
53
  :start_workflow_operation,
54
+ :arg_hints,
55
+ :result_hint,
50
56
  :headers,
51
57
  :rpc_options
52
58
  )
@@ -56,13 +62,16 @@ module Temporalio
56
62
  :signal,
57
63
  :args,
58
64
  :start_workflow_operation,
65
+ :arg_hints,
59
66
  # Headers intentionally not defined here, because they are not separate from start_workflow_operation
60
67
  :rpc_options
61
68
  )
62
69
 
63
- # Input for {Outbound.list_workflows}.
64
- ListWorkflowsInput = Data.define(
70
+ # Input for {Outbound.list_workflow_page}.
71
+ ListWorkflowPageInput = Data.define(
65
72
  :query,
73
+ :next_page_token,
74
+ :page_size,
66
75
  :rpc_options
67
76
  )
68
77
 
@@ -95,6 +104,7 @@ module Temporalio
95
104
  :run_id,
96
105
  :signal,
97
106
  :args,
107
+ :arg_hints,
98
108
  :headers,
99
109
  :rpc_options
100
110
  )
@@ -106,6 +116,8 @@ module Temporalio
106
116
  :query,
107
117
  :args,
108
118
  :reject_condition,
119
+ :arg_hints,
120
+ :result_hint,
109
121
  :headers,
110
122
  :rpc_options
111
123
  )
@@ -118,6 +130,8 @@ module Temporalio
118
130
  :update,
119
131
  :args,
120
132
  :wait_for_stage,
133
+ :arg_hints,
134
+ :result_hint,
121
135
  :headers,
122
136
  :rpc_options
123
137
  )
@@ -216,6 +230,7 @@ module Temporalio
216
230
  HeartbeatAsyncActivityInput = Data.define(
217
231
  :task_token_or_id_reference,
218
232
  :details,
233
+ :detail_hints,
219
234
  :rpc_options
220
235
  )
221
236
 
@@ -223,6 +238,7 @@ module Temporalio
223
238
  CompleteAsyncActivityInput = Data.define(
224
239
  :task_token_or_id_reference,
225
240
  :result,
241
+ :result_hint,
226
242
  :rpc_options
227
243
  )
228
244
 
@@ -231,6 +247,7 @@ module Temporalio
231
247
  :task_token_or_id_reference,
232
248
  :error,
233
249
  :last_heartbeat_details,
250
+ :last_heartbeat_detail_hints,
234
251
  :rpc_options
235
252
  )
236
253
 
@@ -238,6 +255,7 @@ module Temporalio
238
255
  ReportCancellationAsyncActivityInput = Data.define(
239
256
  :task_token_or_id_reference,
240
257
  :details,
258
+ :detail_hints,
241
259
  :rpc_options
242
260
  )
243
261
 
@@ -279,12 +297,12 @@ module Temporalio
279
297
  next_interceptor.signal_with_start_workflow(input)
280
298
  end
281
299
 
282
- # Called for every {Client.list_workflows} call.
300
+ # Called for every {Client.list_workflow_page} call.
283
301
  #
284
- # @param input [ListWorkflowsInput] Input.
285
- # @return [Enumerator<WorkflowExecution>] Enumerable workflow executions.
286
- def list_workflows(input)
287
- next_interceptor.list_workflows(input)
302
+ # @param input [ListWorkflowPageInput] Input.
303
+ # @return [Client::ListWorkflowPage] Enumerable workflow executions, with a #next_page_token method.
304
+ def list_workflow_page(input)
305
+ next_interceptor.list_workflow_page(input)
288
306
  end
289
307
 
290
308
  # Called for every {Client.count_workflows} call.
@@ -175,6 +175,7 @@ module Temporalio
175
175
  :retry_policy,
176
176
  :memo,
177
177
  :search_attributes,
178
+ :arg_hints,
178
179
  :headers
179
180
  )
180
181
 
@@ -208,6 +209,9 @@ module Temporalio
208
209
  # @return [Hash<String, Object>, nil] Memo for the workflow.
209
210
  # @!attribute search_attributes
210
211
  # @return [SearchAttributes, nil] Search attributes for the workflow.
212
+ # @!attribute arg_hints
213
+ # @return [Array<Object>, nil] Converter hints for workflow arguments. This is only user-set (e.g. on create)
214
+ # and is not persisted and therefore will not be set when describing a workflow.
211
215
  # @!attribute headers
212
216
  # @return [Hash<String, Object>, nil] Headers for the workflow.
213
217
  class StartWorkflow
@@ -249,10 +253,13 @@ module Temporalio
249
253
  retry_policy: nil,
250
254
  memo: nil,
251
255
  search_attributes: nil,
256
+ arg_hints: nil,
252
257
  headers: nil
253
258
  )
259
+ workflow, defn_arg_hints, =
260
+ Workflow::Definition._workflow_type_and_hints_from_workflow_parameter(workflow)
254
261
  _original_new( # steep:ignore
255
- workflow: Workflow::Definition._workflow_type_from_workflow_parameter(workflow),
262
+ workflow:,
256
263
  args:,
257
264
  id:,
258
265
  task_queue:,
@@ -264,6 +271,7 @@ module Temporalio
264
271
  retry_policy:,
265
272
  memo:,
266
273
  search_attributes:,
274
+ arg_hints: arg_hints || defn_arg_hints,
267
275
  headers:
268
276
  )
269
277
  end
@@ -296,7 +304,7 @@ module Temporalio
296
304
  workflow_id: id,
297
305
  workflow_type: Api::Common::V1::WorkflowType.new(name: workflow),
298
306
  task_queue: Api::TaskQueue::V1::TaskQueue.new(name: task_queue),
299
- input: data_converter.to_payloads(args),
307
+ input: data_converter.to_payloads(args, hints: arg_hints),
300
308
  workflow_execution_timeout: Internal::ProtoUtils.seconds_to_duration(execution_timeout),
301
309
  workflow_run_timeout: Internal::ProtoUtils.seconds_to_duration(run_timeout),
302
310
  workflow_task_timeout: Internal::ProtoUtils.seconds_to_duration(task_timeout),
@@ -24,6 +24,8 @@ module Temporalio
24
24
  :memo,
25
25
  :search_attributes,
26
26
  :start_delay,
27
+ :arg_hints,
28
+ :result_hint,
27
29
  :headers
28
30
  )
29
31
 
@@ -55,10 +57,14 @@ module Temporalio
55
57
  memo: nil,
56
58
  search_attributes: nil,
57
59
  start_delay: nil,
60
+ arg_hints: nil,
61
+ result_hint: nil,
58
62
  headers: {}
59
63
  )
64
+ workflow, defn_arg_hints, defn_result_hint =
65
+ Workflow::Definition._workflow_type_and_hints_from_workflow_parameter(workflow)
60
66
  @options = Options.new(
61
- workflow: Workflow::Definition._workflow_type_from_workflow_parameter(workflow),
67
+ workflow:,
62
68
  args:,
63
69
  id:,
64
70
  task_queue:,
@@ -74,6 +80,8 @@ module Temporalio
74
80
  memo:,
75
81
  search_attributes:,
76
82
  start_delay:,
83
+ arg_hints: arg_hints || defn_arg_hints,
84
+ result_hint: result_hint || defn_result_hint,
77
85
  headers:
78
86
  )
79
87
  @workflow_handle_mutex = Mutex.new
@@ -48,13 +48,21 @@ module Temporalio
48
48
  # @return [String, nil] First execution run ID.
49
49
  attr_reader :first_execution_run_id
50
50
 
51
+ # Result hint for the result of this workflow. If this handle was created via {Client.start_workflow}, this is set
52
+ # from there (either via result hint on that call or workflow definition's result hint). Otherwise, the result
53
+ # hint is set by the creator of the handle.
54
+ #
55
+ # @return [Object, nil] Result hint.
56
+ attr_reader :result_hint
57
+
51
58
  # @!visibility private
52
- def initialize(client:, id:, run_id:, result_run_id:, first_execution_run_id:)
59
+ def initialize(client:, id:, run_id:, result_run_id:, first_execution_run_id:, result_hint:)
53
60
  @client = client
54
61
  @id = id
55
62
  @run_id = run_id
56
63
  @result_run_id = result_run_id
57
64
  @first_execution_run_id = first_execution_run_id
65
+ @result_hint = result_hint
58
66
  end
59
67
 
60
68
  # Wait for the result of the workflow.
@@ -64,6 +72,8 @@ module Temporalio
64
72
  #
65
73
  # @param follow_runs [Boolean] If +true+, workflow runs will be continually fetched across retries and continue as
66
74
  # new until the latest one is found. If +false+, the first result is used.
75
+ # @param result_hint [Object, nil] Override the result hint for the result. If unset/nil, uses one on the handle
76
+ # itself.
67
77
  # @param rpc_options [RPCOptions, nil] Advanced RPC options.
68
78
  #
69
79
  # @return [Object] Result of the workflow after being converted by the data converter.
@@ -71,7 +81,7 @@ module Temporalio
71
81
  # @raise [Error::WorkflowFailedError] Workflow failed with +cause+ as the cause.
72
82
  # @raise [Error::WorkflowContinuedAsNewError] Workflow continued as new and +follow_runs+ is +false+.
73
83
  # @raise [Error::RPCError] RPC error from call.
74
- def result(follow_runs: true, rpc_options: nil)
84
+ def result(follow_runs: true, result_hint: nil, rpc_options: nil)
75
85
  # Wait on the close event, following as needed
76
86
  hist_run_id = result_run_id
77
87
  loop do
@@ -91,7 +101,7 @@ module Temporalio
91
101
  hist_run_id = attrs.new_execution_run_id
92
102
  next if follow_runs && hist_run_id && !hist_run_id.empty?
93
103
 
94
- return @client.data_converter.from_payloads(attrs.result).first
104
+ return @client.data_converter.from_payloads(attrs.result, hints: Array(@result_hint || result_hint)).first
95
105
  when :EVENT_TYPE_WORKFLOW_EXECUTION_FAILED
96
106
  attrs = event.workflow_execution_failed_event_attributes
97
107
  hist_run_id = attrs.new_execution_run_id
@@ -212,18 +222,22 @@ module Temporalio
212
222
  #
213
223
  # @param signal [Workflow::Definition::Signal, Symbol, String] Signal definition or name.
214
224
  # @param args [Array<Object>] Signal arguments.
225
+ # @param arg_hints [Array<Object>, nil] Signal argument hints. If unset/nil and a signal definition is passed,
226
+ # uses the ones on the signal definition if present.
215
227
  # @param rpc_options [RPCOptions, nil] Advanced RPC options.
216
228
  #
217
229
  # @raise [Error::RPCError] RPC error from call.
218
230
  #
219
231
  # @note Handles created as a result of {Client.start_workflow} will signal the latest workflow with the same
220
232
  # workflow ID even if it is unrelated to the started workflow.
221
- def signal(signal, *args, rpc_options: nil)
233
+ def signal(signal, *args, arg_hints: nil, rpc_options: nil)
234
+ signal, defn_arg_hints = Workflow::Definition::Signal._name_and_hints_from_parameter(signal)
222
235
  @client._impl.signal_workflow(Interceptor::SignalWorkflowInput.new(
223
236
  workflow_id: id,
224
237
  run_id:,
225
- signal: Workflow::Definition::Signal._name_from_parameter(signal),
238
+ signal:,
226
239
  args:,
240
+ arg_hints: arg_hints || defn_arg_hints,
227
241
  headers: {},
228
242
  rpc_options:
229
243
  ))
@@ -235,6 +249,10 @@ module Temporalio
235
249
  # @param query [Workflow::Definition::Query, Symbol, String] Query definition or name.
236
250
  # @param args [Array<Object>] Query arguments.
237
251
  # @param reject_condition [WorkflowQueryRejectCondition, nil] Condition for rejecting the query.
252
+ # @param arg_hints [Array<Object>, nil] Query argument hints. If unset/nil and a query definition is passed,
253
+ # uses the ones on the query definition if present.
254
+ # @param result_hint [Object, nil] Query result hints. If unset/nil and a query definition is passed, uses the
255
+ # one on the query definition if present.
238
256
  # @param rpc_options [RPCOptions, nil] Advanced RPC options.
239
257
  #
240
258
  # @return [Object, nil] Query result.
@@ -249,14 +267,19 @@ module Temporalio
249
267
  query,
250
268
  *args,
251
269
  reject_condition: @client.options.default_workflow_query_reject_condition,
270
+ arg_hints: nil,
271
+ result_hint: nil,
252
272
  rpc_options: nil
253
273
  )
274
+ query, defn_arg_hints, defn_result_hint = Workflow::Definition::Query._name_and_hints_from_parameter(query)
254
275
  @client._impl.query_workflow(Interceptor::QueryWorkflowInput.new(
255
276
  workflow_id: id,
256
277
  run_id:,
257
- query: Workflow::Definition::Query._name_from_parameter(query),
278
+ query:,
258
279
  args:,
259
280
  reject_condition:,
281
+ arg_hints: arg_hints || defn_arg_hints,
282
+ result_hint: result_hint || defn_result_hint,
260
283
  headers: {},
261
284
  rpc_options:
262
285
  ))
@@ -270,6 +293,10 @@ module Temporalio
270
293
  # @param wait_for_stage [WorkflowUpdateWaitStage] Required stage to wait until returning. ADMITTED is not
271
294
  # currently supported. See https://docs.temporal.io/workflows#update for more details.
272
295
  # @param id [String] ID of the update.
296
+ # @param arg_hints [Array<Object>, nil] Update argument hints. If unset/nil and am update definition is passed,
297
+ # uses the ones on the update definition if present.
298
+ # @param result_hint [Object, nil] Update result hints. If unset/nil and an update definition is passed, uses the
299
+ # one on the update definition if present.
273
300
  # @param rpc_options [RPCOptions, nil] Advanced RPC options.
274
301
  #
275
302
  # @return [WorkflowUpdateHandle] The update handle.
@@ -285,15 +312,20 @@ module Temporalio
285
312
  *args,
286
313
  wait_for_stage:,
287
314
  id: SecureRandom.uuid,
315
+ arg_hints: nil,
316
+ result_hint: nil,
288
317
  rpc_options: nil
289
318
  )
319
+ update, defn_arg_hints, defn_result_hint = Workflow::Definition::Update._name_and_hints_from_parameter(update)
290
320
  @client._impl.start_workflow_update(Interceptor::StartWorkflowUpdateInput.new(
291
321
  workflow_id: self.id,
292
322
  run_id:,
293
323
  update_id: id,
294
- update: Workflow::Definition::Update._name_from_parameter(update),
324
+ update:,
295
325
  args:,
296
326
  wait_for_stage:,
327
+ arg_hints: arg_hints || defn_arg_hints,
328
+ result_hint: result_hint || defn_result_hint,
297
329
  headers: {},
298
330
  rpc_options:
299
331
  ))
@@ -305,6 +337,10 @@ module Temporalio
305
337
  # @param update [Workflow::Definition::Update, Symbol, String] Update definition or name.
306
338
  # @param args [Array<Object>] Update arguments.
307
339
  # @param id [String] ID of the update.
340
+ # @param arg_hints [Array<Object>, nil] Update argument hints. If unset/nil and am update definition is passed,
341
+ # uses the ones on the update definition if present.
342
+ # @param result_hint [Object, nil] Update result hints. If unset/nil and an update definition is passed, uses the
343
+ # one on the update definition if present.
308
344
  # @param rpc_options [RPCOptions, nil] Advanced RPC options.
309
345
  #
310
346
  # @return [Object, nil] Update result.
@@ -316,12 +352,14 @@ module Temporalio
316
352
  #
317
353
  # @note Handles created as a result of {Client.start_workflow} will send updates the latest workflow with the same
318
354
  # workflow ID even if it is unrelated to the started workflow.
319
- def execute_update(update, *args, id: SecureRandom.uuid, rpc_options: nil)
355
+ def execute_update(update, *args, id: SecureRandom.uuid, arg_hints: nil, result_hint: nil, rpc_options: nil)
320
356
  start_update(
321
357
  update,
322
358
  *args,
323
359
  wait_for_stage: WorkflowUpdateWaitStage::COMPLETED,
324
360
  id:,
361
+ arg_hints:,
362
+ result_hint:,
325
363
  rpc_options:
326
364
  ).result
327
365
  end
@@ -331,15 +369,17 @@ module Temporalio
331
369
  # @param id [String] ID of the update.
332
370
  # @param specific_run_id [String, nil] Workflow run ID to get update handle for. Default is the {run_id}. Most
333
371
  # users will not need to set this and instead use the one on the class.
372
+ # @param result_hint [Object, nil] Result hint for the update result to set on the handle.
334
373
  #
335
374
  # @return [WorkflowUpdateHandle] The update handle.
336
- def update_handle(id, specific_run_id: run_id)
375
+ def update_handle(id, specific_run_id: run_id, result_hint: nil)
337
376
  WorkflowUpdateHandle.new(
338
377
  client: @client,
339
378
  id:,
340
379
  workflow_id: self.id,
341
380
  workflow_run_id: specific_run_id,
342
- known_outcome: nil
381
+ known_outcome: nil,
382
+ result_hint:
343
383
  )
344
384
  end
345
385
 
@@ -18,13 +18,17 @@ module Temporalio
18
18
  # @return [String, nil] Run ID for the workflow.
19
19
  attr_reader :workflow_run_id
20
20
 
21
+ # @return [Object, nil] Result hint if one set when the handle was created.
22
+ attr_reader :result_hint
23
+
21
24
  # @!visibility private
22
- def initialize(client:, id:, workflow_id:, workflow_run_id:, known_outcome:)
25
+ def initialize(client:, id:, workflow_id:, workflow_run_id:, known_outcome:, result_hint:)
23
26
  @client = client
24
27
  @id = id
25
28
  @workflow_id = workflow_id
26
29
  @workflow_run_id = workflow_run_id
27
30
  @known_outcome = known_outcome
31
+ @result_hint = result_hint
28
32
  end
29
33
 
30
34
  # @return [Boolean] True if the result is already known and {result} will not make a blocking call, false if
@@ -36,6 +40,7 @@ module Temporalio
36
40
  # Wait for and return the result of the update. The result may already be known in which case no network call is
37
41
  # made. Otherwise the result will be polled for until it is returned.
38
42
  #
43
+ # @param result_hint [Object, nil] If not nil, overrides handle-level result hint for getting the result.
39
44
  # @param rpc_options [RPCOptions, nil] Advanced RPC options.
40
45
  #
41
46
  # @return [Object, nil] Update result.
@@ -44,7 +49,7 @@ module Temporalio
44
49
  # @raise [Error::WorkflowUpdateRPCTimeoutOrCanceledError] This update call timed out or was canceled. This doesn't
45
50
  # mean the update itself was timed out or canceled.
46
51
  # @raise [Error::RPCError] RPC error from call.
47
- def result(rpc_options: nil)
52
+ def result(result_hint: nil, rpc_options: nil)
48
53
  @known_outcome ||= @client._impl.poll_workflow_update(Interceptor::PollWorkflowUpdateInput.new(
49
54
  workflow_id:,
50
55
  run_id: workflow_run_id,
@@ -56,7 +61,8 @@ module Temporalio
56
61
  raise Error::WorkflowUpdateFailedError.new, cause: @client.data_converter.from_failure(@known_outcome.failure)
57
62
  end
58
63
 
59
- results = @client.data_converter.from_payloads(@known_outcome.success)
64
+ results = @client.data_converter.from_payloads(@known_outcome.success,
65
+ hints: Array(result_hint || @result_hint))
60
66
  warn("Expected 0 or 1 update result, got #{results.size}") if results.size > 1
61
67
  results.first
62
68
  end