temporalio 0.1.1 → 0.2.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 (585) hide show
  1. checksums.yaml +4 -4
  2. data/Cargo.lock +4035 -0
  3. data/Cargo.toml +25 -0
  4. data/Gemfile +20 -0
  5. data/LICENSE +16 -15
  6. data/README.md +455 -195
  7. data/Rakefile +387 -0
  8. data/ext/Cargo.toml +25 -0
  9. data/lib/temporalio/activity/complete_async_error.rb +11 -0
  10. data/lib/temporalio/activity/context.rb +82 -77
  11. data/lib/temporalio/activity/definition.rb +77 -0
  12. data/lib/temporalio/activity/info.rb +42 -46
  13. data/lib/temporalio/activity.rb +49 -65
  14. data/lib/temporalio/api/batch/v1/message.rb +31 -0
  15. data/lib/temporalio/api/cloud/cloudservice/v1/request_response.rb +93 -0
  16. data/lib/temporalio/api/cloud/cloudservice/v1/service.rb +25 -0
  17. data/lib/temporalio/api/cloud/cloudservice.rb +3 -0
  18. data/lib/temporalio/api/cloud/identity/v1/message.rb +36 -0
  19. data/lib/temporalio/api/cloud/namespace/v1/message.rb +35 -0
  20. data/lib/temporalio/api/cloud/operation/v1/message.rb +27 -0
  21. data/lib/temporalio/api/cloud/region/v1/message.rb +23 -0
  22. data/lib/temporalio/api/command/v1/message.rb +46 -0
  23. data/lib/temporalio/api/common/v1/grpc_status.rb +23 -0
  24. data/lib/temporalio/api/common/v1/message.rb +41 -0
  25. data/lib/temporalio/api/enums/v1/batch_operation.rb +22 -0
  26. data/lib/temporalio/api/enums/v1/command_type.rb +21 -0
  27. data/lib/temporalio/api/enums/v1/common.rb +26 -0
  28. data/lib/temporalio/api/enums/v1/event_type.rb +21 -0
  29. data/lib/temporalio/api/enums/v1/failed_cause.rb +26 -0
  30. data/lib/temporalio/api/enums/v1/namespace.rb +23 -0
  31. data/lib/temporalio/api/enums/v1/query.rb +22 -0
  32. data/lib/temporalio/api/enums/v1/reset.rb +23 -0
  33. data/lib/temporalio/api/enums/v1/schedule.rb +21 -0
  34. data/lib/temporalio/api/enums/v1/task_queue.rb +25 -0
  35. data/lib/temporalio/api/enums/v1/update.rb +22 -0
  36. data/lib/temporalio/api/enums/v1/workflow.rb +30 -0
  37. data/lib/temporalio/api/errordetails/v1/message.rb +42 -0
  38. data/lib/temporalio/api/export/v1/message.rb +24 -0
  39. data/lib/temporalio/api/failure/v1/message.rb +35 -0
  40. data/lib/temporalio/api/filter/v1/message.rb +27 -0
  41. data/lib/temporalio/api/history/v1/message.rb +90 -0
  42. data/lib/temporalio/api/namespace/v1/message.rb +31 -0
  43. data/lib/temporalio/api/nexus/v1/message.rb +40 -0
  44. data/lib/temporalio/api/operatorservice/v1/request_response.rb +49 -0
  45. data/lib/temporalio/api/operatorservice/v1/service.rb +23 -0
  46. data/lib/temporalio/api/operatorservice.rb +3 -0
  47. data/lib/temporalio/api/protocol/v1/message.rb +23 -0
  48. data/lib/temporalio/api/query/v1/message.rb +27 -0
  49. data/lib/temporalio/api/replication/v1/message.rb +26 -0
  50. data/lib/temporalio/api/schedule/v1/message.rb +42 -0
  51. data/lib/temporalio/api/sdk/v1/enhanced_stack_trace.rb +25 -0
  52. data/lib/temporalio/api/sdk/v1/task_complete_metadata.rb +21 -0
  53. data/lib/temporalio/api/sdk/v1/user_metadata.rb +23 -0
  54. data/lib/temporalio/api/sdk/v1/workflow_metadata.rb +23 -0
  55. data/lib/temporalio/api/taskqueue/v1/message.rb +45 -0
  56. data/lib/temporalio/api/update/v1/message.rb +33 -0
  57. data/lib/temporalio/api/version/v1/message.rb +26 -0
  58. data/lib/temporalio/api/workflow/v1/message.rb +43 -0
  59. data/lib/temporalio/api/workflowservice/v1/request_response.rb +189 -0
  60. data/lib/temporalio/api/workflowservice/v1/service.rb +23 -0
  61. data/lib/temporalio/api/workflowservice.rb +3 -0
  62. data/lib/temporalio/api.rb +13 -0
  63. data/lib/temporalio/cancellation.rb +150 -0
  64. data/lib/temporalio/client/activity_id_reference.rb +32 -0
  65. data/lib/temporalio/client/async_activity_handle.rb +110 -0
  66. data/lib/temporalio/client/connection/cloud_service.rb +648 -0
  67. data/lib/temporalio/client/connection/operator_service.rb +249 -0
  68. data/lib/temporalio/client/connection/service.rb +41 -0
  69. data/lib/temporalio/client/connection/workflow_service.rb +1218 -0
  70. data/lib/temporalio/client/connection.rb +270 -0
  71. data/lib/temporalio/client/interceptor.rb +316 -0
  72. data/lib/temporalio/client/workflow_execution.rb +103 -0
  73. data/lib/temporalio/client/workflow_execution_count.rb +36 -0
  74. data/lib/temporalio/client/workflow_execution_status.rb +18 -0
  75. data/lib/temporalio/client/workflow_handle.rb +380 -177
  76. data/lib/temporalio/client/workflow_query_reject_condition.rb +14 -0
  77. data/lib/temporalio/client/workflow_update_handle.rb +67 -0
  78. data/lib/temporalio/client/workflow_update_wait_stage.rb +17 -0
  79. data/lib/temporalio/client.rb +366 -93
  80. data/lib/temporalio/common_enums.rb +24 -0
  81. data/lib/temporalio/converters/data_converter.rb +102 -0
  82. data/lib/temporalio/converters/failure_converter.rb +200 -0
  83. data/lib/temporalio/converters/payload_codec.rb +26 -0
  84. data/lib/temporalio/converters/payload_converter/binary_null.rb +34 -0
  85. data/lib/temporalio/converters/payload_converter/binary_plain.rb +35 -0
  86. data/lib/temporalio/converters/payload_converter/binary_protobuf.rb +42 -0
  87. data/lib/temporalio/converters/payload_converter/composite.rb +62 -0
  88. data/lib/temporalio/converters/payload_converter/encoding.rb +35 -0
  89. data/lib/temporalio/converters/payload_converter/json_plain.rb +44 -0
  90. data/lib/temporalio/converters/payload_converter/json_protobuf.rb +41 -0
  91. data/lib/temporalio/converters/payload_converter.rb +73 -0
  92. data/lib/temporalio/converters.rb +9 -0
  93. data/lib/temporalio/error/failure.rb +119 -94
  94. data/lib/temporalio/error.rb +147 -0
  95. data/lib/temporalio/internal/bridge/api/activity_result/activity_result.rb +34 -0
  96. data/lib/temporalio/internal/bridge/api/activity_task/activity_task.rb +31 -0
  97. data/lib/temporalio/internal/bridge/api/child_workflow/child_workflow.rb +33 -0
  98. data/lib/temporalio/internal/bridge/api/common/common.rb +26 -0
  99. data/lib/temporalio/internal/bridge/api/core_interface.rb +36 -0
  100. data/lib/temporalio/internal/bridge/api/external_data/external_data.rb +27 -0
  101. data/lib/temporalio/internal/bridge/api/workflow_activation/workflow_activation.rb +52 -0
  102. data/lib/temporalio/internal/bridge/api/workflow_commands/workflow_commands.rb +54 -0
  103. data/lib/temporalio/internal/bridge/api/workflow_completion/workflow_completion.rb +30 -0
  104. data/lib/temporalio/internal/bridge/api.rb +3 -0
  105. data/lib/temporalio/internal/bridge/client.rb +90 -0
  106. data/lib/temporalio/internal/bridge/runtime.rb +53 -0
  107. data/lib/temporalio/internal/bridge/testing.rb +46 -0
  108. data/lib/temporalio/internal/bridge/worker.rb +83 -0
  109. data/lib/temporalio/internal/bridge.rb +36 -0
  110. data/lib/temporalio/internal/client/implementation.rb +525 -0
  111. data/lib/temporalio/internal/proto_utils.rb +54 -0
  112. data/lib/temporalio/internal/worker/activity_worker.rb +345 -0
  113. data/lib/temporalio/internal/worker/multi_runner.rb +169 -0
  114. data/lib/temporalio/internal.rb +7 -0
  115. data/lib/temporalio/retry_policy.rb +39 -80
  116. data/lib/temporalio/runtime.rb +259 -13
  117. data/lib/temporalio/scoped_logger.rb +96 -0
  118. data/lib/temporalio/search_attributes.rb +300 -0
  119. data/lib/temporalio/testing/activity_environment.rb +132 -0
  120. data/lib/temporalio/testing/workflow_environment.rb +113 -88
  121. data/lib/temporalio/testing.rb +4 -169
  122. data/lib/temporalio/version.rb +3 -1
  123. data/lib/temporalio/worker/activity_executor/fiber.rb +49 -0
  124. data/lib/temporalio/worker/activity_executor/thread_pool.rb +254 -0
  125. data/lib/temporalio/worker/activity_executor.rb +55 -0
  126. data/lib/temporalio/worker/interceptor.rb +88 -0
  127. data/lib/temporalio/worker/tuner.rb +151 -0
  128. data/lib/temporalio/worker.rb +385 -163
  129. data/lib/temporalio/workflow_history.rb +22 -0
  130. data/lib/temporalio.rb +2 -7
  131. data/temporalio.gemspec +20 -39
  132. metadata +131 -712
  133. data/bridge/Cargo.lock +0 -2997
  134. data/bridge/Cargo.toml +0 -29
  135. data/bridge/sdk-core/ARCHITECTURE.md +0 -76
  136. data/bridge/sdk-core/Cargo.toml +0 -2
  137. data/bridge/sdk-core/LICENSE.txt +0 -23
  138. data/bridge/sdk-core/README.md +0 -117
  139. data/bridge/sdk-core/arch_docs/diagrams/README.md +0 -10
  140. data/bridge/sdk-core/arch_docs/diagrams/sticky_queues.puml +0 -40
  141. data/bridge/sdk-core/arch_docs/diagrams/workflow_internals.svg +0 -1
  142. data/bridge/sdk-core/arch_docs/sticky_queues.md +0 -51
  143. data/bridge/sdk-core/client/Cargo.toml +0 -40
  144. data/bridge/sdk-core/client/LICENSE.txt +0 -23
  145. data/bridge/sdk-core/client/src/lib.rs +0 -1462
  146. data/bridge/sdk-core/client/src/metrics.rs +0 -174
  147. data/bridge/sdk-core/client/src/raw.rs +0 -932
  148. data/bridge/sdk-core/client/src/retry.rs +0 -763
  149. data/bridge/sdk-core/client/src/workflow_handle/mod.rs +0 -185
  150. data/bridge/sdk-core/core/Cargo.toml +0 -129
  151. data/bridge/sdk-core/core/LICENSE.txt +0 -23
  152. data/bridge/sdk-core/core/benches/workflow_replay.rs +0 -76
  153. data/bridge/sdk-core/core/src/abstractions.rs +0 -355
  154. data/bridge/sdk-core/core/src/core_tests/activity_tasks.rs +0 -1049
  155. data/bridge/sdk-core/core/src/core_tests/child_workflows.rs +0 -221
  156. data/bridge/sdk-core/core/src/core_tests/determinism.rs +0 -270
  157. data/bridge/sdk-core/core/src/core_tests/local_activities.rs +0 -1046
  158. data/bridge/sdk-core/core/src/core_tests/mod.rs +0 -100
  159. data/bridge/sdk-core/core/src/core_tests/queries.rs +0 -893
  160. data/bridge/sdk-core/core/src/core_tests/replay_flag.rs +0 -65
  161. data/bridge/sdk-core/core/src/core_tests/workers.rs +0 -257
  162. data/bridge/sdk-core/core/src/core_tests/workflow_cancels.rs +0 -124
  163. data/bridge/sdk-core/core/src/core_tests/workflow_tasks.rs +0 -2433
  164. data/bridge/sdk-core/core/src/ephemeral_server/mod.rs +0 -609
  165. data/bridge/sdk-core/core/src/internal_flags.rs +0 -136
  166. data/bridge/sdk-core/core/src/lib.rs +0 -289
  167. data/bridge/sdk-core/core/src/pollers/mod.rs +0 -54
  168. data/bridge/sdk-core/core/src/pollers/poll_buffer.rs +0 -297
  169. data/bridge/sdk-core/core/src/protosext/mod.rs +0 -428
  170. data/bridge/sdk-core/core/src/replay/mod.rs +0 -215
  171. data/bridge/sdk-core/core/src/retry_logic.rs +0 -202
  172. data/bridge/sdk-core/core/src/telemetry/log_export.rs +0 -190
  173. data/bridge/sdk-core/core/src/telemetry/metrics.rs +0 -462
  174. data/bridge/sdk-core/core/src/telemetry/mod.rs +0 -423
  175. data/bridge/sdk-core/core/src/telemetry/prometheus_server.rs +0 -83
  176. data/bridge/sdk-core/core/src/test_help/mod.rs +0 -939
  177. data/bridge/sdk-core/core/src/worker/activities/activity_heartbeat_manager.rs +0 -536
  178. data/bridge/sdk-core/core/src/worker/activities/activity_task_poller_stream.rs +0 -89
  179. data/bridge/sdk-core/core/src/worker/activities/local_activities.rs +0 -1278
  180. data/bridge/sdk-core/core/src/worker/activities.rs +0 -557
  181. data/bridge/sdk-core/core/src/worker/client/mocks.rs +0 -107
  182. data/bridge/sdk-core/core/src/worker/client.rs +0 -389
  183. data/bridge/sdk-core/core/src/worker/mod.rs +0 -677
  184. data/bridge/sdk-core/core/src/worker/workflow/bridge.rs +0 -35
  185. data/bridge/sdk-core/core/src/worker/workflow/driven_workflow.rs +0 -99
  186. data/bridge/sdk-core/core/src/worker/workflow/history_update.rs +0 -1111
  187. data/bridge/sdk-core/core/src/worker/workflow/machines/activity_state_machine.rs +0 -964
  188. data/bridge/sdk-core/core/src/worker/workflow/machines/cancel_external_state_machine.rs +0 -294
  189. data/bridge/sdk-core/core/src/worker/workflow/machines/cancel_workflow_state_machine.rs +0 -168
  190. data/bridge/sdk-core/core/src/worker/workflow/machines/child_workflow_state_machine.rs +0 -918
  191. data/bridge/sdk-core/core/src/worker/workflow/machines/complete_workflow_state_machine.rs +0 -137
  192. data/bridge/sdk-core/core/src/worker/workflow/machines/continue_as_new_workflow_state_machine.rs +0 -158
  193. data/bridge/sdk-core/core/src/worker/workflow/machines/fail_workflow_state_machine.rs +0 -130
  194. data/bridge/sdk-core/core/src/worker/workflow/machines/local_activity_state_machine.rs +0 -1525
  195. data/bridge/sdk-core/core/src/worker/workflow/machines/mod.rs +0 -324
  196. data/bridge/sdk-core/core/src/worker/workflow/machines/modify_workflow_properties_state_machine.rs +0 -179
  197. data/bridge/sdk-core/core/src/worker/workflow/machines/patch_state_machine.rs +0 -659
  198. data/bridge/sdk-core/core/src/worker/workflow/machines/signal_external_state_machine.rs +0 -439
  199. data/bridge/sdk-core/core/src/worker/workflow/machines/timer_state_machine.rs +0 -435
  200. data/bridge/sdk-core/core/src/worker/workflow/machines/transition_coverage.rs +0 -175
  201. data/bridge/sdk-core/core/src/worker/workflow/machines/upsert_search_attributes_state_machine.rs +0 -249
  202. data/bridge/sdk-core/core/src/worker/workflow/machines/workflow_machines/local_acts.rs +0 -85
  203. data/bridge/sdk-core/core/src/worker/workflow/machines/workflow_machines.rs +0 -1280
  204. data/bridge/sdk-core/core/src/worker/workflow/machines/workflow_task_state_machine.rs +0 -269
  205. data/bridge/sdk-core/core/src/worker/workflow/managed_run/managed_wf_test.rs +0 -213
  206. data/bridge/sdk-core/core/src/worker/workflow/managed_run.rs +0 -1305
  207. data/bridge/sdk-core/core/src/worker/workflow/mod.rs +0 -1276
  208. data/bridge/sdk-core/core/src/worker/workflow/run_cache.rs +0 -128
  209. data/bridge/sdk-core/core/src/worker/workflow/wft_extraction.rs +0 -125
  210. data/bridge/sdk-core/core/src/worker/workflow/wft_poller.rs +0 -85
  211. data/bridge/sdk-core/core/src/worker/workflow/workflow_stream/saved_wf_inputs.rs +0 -117
  212. data/bridge/sdk-core/core/src/worker/workflow/workflow_stream/tonic_status_serde.rs +0 -24
  213. data/bridge/sdk-core/core/src/worker/workflow/workflow_stream.rs +0 -715
  214. data/bridge/sdk-core/core-api/Cargo.toml +0 -33
  215. data/bridge/sdk-core/core-api/LICENSE.txt +0 -23
  216. data/bridge/sdk-core/core-api/src/errors.rs +0 -62
  217. data/bridge/sdk-core/core-api/src/lib.rs +0 -113
  218. data/bridge/sdk-core/core-api/src/telemetry.rs +0 -141
  219. data/bridge/sdk-core/core-api/src/worker.rs +0 -161
  220. data/bridge/sdk-core/etc/deps.svg +0 -162
  221. data/bridge/sdk-core/etc/dynamic-config.yaml +0 -2
  222. data/bridge/sdk-core/etc/otel-collector-config.yaml +0 -36
  223. data/bridge/sdk-core/etc/prometheus.yaml +0 -6
  224. data/bridge/sdk-core/etc/regen-depgraph.sh +0 -5
  225. data/bridge/sdk-core/fsm/Cargo.toml +0 -18
  226. data/bridge/sdk-core/fsm/LICENSE.txt +0 -23
  227. data/bridge/sdk-core/fsm/README.md +0 -3
  228. data/bridge/sdk-core/fsm/rustfsm_procmacro/Cargo.toml +0 -27
  229. data/bridge/sdk-core/fsm/rustfsm_procmacro/LICENSE.txt +0 -23
  230. data/bridge/sdk-core/fsm/rustfsm_procmacro/src/lib.rs +0 -650
  231. data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/progress.rs +0 -8
  232. data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/dupe_transitions_fail.rs +0 -18
  233. data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/dupe_transitions_fail.stderr +0 -12
  234. data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/dynamic_dest_pass.rs +0 -41
  235. data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/forgot_name_fail.rs +0 -14
  236. data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/forgot_name_fail.stderr +0 -11
  237. data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/handler_arg_pass.rs +0 -32
  238. data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/handler_pass.rs +0 -31
  239. data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/medium_complex_pass.rs +0 -46
  240. data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/no_handle_conversions_require_into_fail.rs +0 -29
  241. data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/no_handle_conversions_require_into_fail.stderr +0 -12
  242. data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/simple_pass.rs +0 -32
  243. data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/struct_event_variant_fail.rs +0 -18
  244. data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/struct_event_variant_fail.stderr +0 -5
  245. data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/tuple_more_item_event_variant_fail.rs +0 -11
  246. data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/tuple_more_item_event_variant_fail.stderr +0 -5
  247. data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/tuple_zero_item_event_variant_fail.rs +0 -11
  248. data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/tuple_zero_item_event_variant_fail.stderr +0 -5
  249. data/bridge/sdk-core/fsm/rustfsm_trait/Cargo.toml +0 -14
  250. data/bridge/sdk-core/fsm/rustfsm_trait/LICENSE.txt +0 -23
  251. data/bridge/sdk-core/fsm/rustfsm_trait/src/lib.rs +0 -254
  252. data/bridge/sdk-core/fsm/src/lib.rs +0 -2
  253. data/bridge/sdk-core/histories/evict_while_la_running_no_interference-16_history.bin +0 -0
  254. data/bridge/sdk-core/histories/evict_while_la_running_no_interference-23_history.bin +0 -0
  255. data/bridge/sdk-core/histories/evict_while_la_running_no_interference-85_history.bin +0 -0
  256. data/bridge/sdk-core/histories/fail_wf_task.bin +0 -0
  257. data/bridge/sdk-core/histories/timer_workflow_history.bin +0 -0
  258. data/bridge/sdk-core/integ-with-otel.sh +0 -7
  259. data/bridge/sdk-core/protos/api_upstream/README.md +0 -9
  260. data/bridge/sdk-core/protos/api_upstream/api-linter.yaml +0 -40
  261. data/bridge/sdk-core/protos/api_upstream/buf.yaml +0 -9
  262. data/bridge/sdk-core/protos/api_upstream/build/go.mod +0 -7
  263. data/bridge/sdk-core/protos/api_upstream/build/go.sum +0 -5
  264. data/bridge/sdk-core/protos/api_upstream/build/tools.go +0 -29
  265. data/bridge/sdk-core/protos/api_upstream/dependencies/gogoproto/gogo.proto +0 -141
  266. data/bridge/sdk-core/protos/api_upstream/go.mod +0 -6
  267. data/bridge/sdk-core/protos/api_upstream/temporal/api/batch/v1/message.proto +0 -89
  268. data/bridge/sdk-core/protos/api_upstream/temporal/api/command/v1/message.proto +0 -248
  269. data/bridge/sdk-core/protos/api_upstream/temporal/api/common/v1/message.proto +0 -123
  270. data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/batch_operation.proto +0 -47
  271. data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/command_type.proto +0 -52
  272. data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/common.proto +0 -56
  273. data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/event_type.proto +0 -170
  274. data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/failed_cause.proto +0 -123
  275. data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/namespace.proto +0 -51
  276. data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/query.proto +0 -50
  277. data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/reset.proto +0 -41
  278. data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/schedule.proto +0 -60
  279. data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/task_queue.proto +0 -59
  280. data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/update.proto +0 -56
  281. data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/workflow.proto +0 -122
  282. data/bridge/sdk-core/protos/api_upstream/temporal/api/errordetails/v1/message.proto +0 -108
  283. data/bridge/sdk-core/protos/api_upstream/temporal/api/failure/v1/message.proto +0 -114
  284. data/bridge/sdk-core/protos/api_upstream/temporal/api/filter/v1/message.proto +0 -56
  285. data/bridge/sdk-core/protos/api_upstream/temporal/api/history/v1/message.proto +0 -787
  286. data/bridge/sdk-core/protos/api_upstream/temporal/api/namespace/v1/message.proto +0 -99
  287. data/bridge/sdk-core/protos/api_upstream/temporal/api/operatorservice/v1/request_response.proto +0 -124
  288. data/bridge/sdk-core/protos/api_upstream/temporal/api/operatorservice/v1/service.proto +0 -80
  289. data/bridge/sdk-core/protos/api_upstream/temporal/api/protocol/v1/message.proto +0 -57
  290. data/bridge/sdk-core/protos/api_upstream/temporal/api/query/v1/message.proto +0 -61
  291. data/bridge/sdk-core/protos/api_upstream/temporal/api/replication/v1/message.proto +0 -55
  292. data/bridge/sdk-core/protos/api_upstream/temporal/api/schedule/v1/message.proto +0 -379
  293. data/bridge/sdk-core/protos/api_upstream/temporal/api/sdk/v1/task_complete_metadata.proto +0 -63
  294. data/bridge/sdk-core/protos/api_upstream/temporal/api/taskqueue/v1/message.proto +0 -108
  295. data/bridge/sdk-core/protos/api_upstream/temporal/api/update/v1/message.proto +0 -111
  296. data/bridge/sdk-core/protos/api_upstream/temporal/api/version/v1/message.proto +0 -59
  297. data/bridge/sdk-core/protos/api_upstream/temporal/api/workflow/v1/message.proto +0 -146
  298. data/bridge/sdk-core/protos/api_upstream/temporal/api/workflowservice/v1/request_response.proto +0 -1199
  299. data/bridge/sdk-core/protos/api_upstream/temporal/api/workflowservice/v1/service.proto +0 -415
  300. data/bridge/sdk-core/protos/grpc/health/v1/health.proto +0 -63
  301. data/bridge/sdk-core/protos/local/temporal/sdk/core/activity_result/activity_result.proto +0 -79
  302. data/bridge/sdk-core/protos/local/temporal/sdk/core/activity_task/activity_task.proto +0 -80
  303. data/bridge/sdk-core/protos/local/temporal/sdk/core/child_workflow/child_workflow.proto +0 -78
  304. data/bridge/sdk-core/protos/local/temporal/sdk/core/common/common.proto +0 -16
  305. data/bridge/sdk-core/protos/local/temporal/sdk/core/core_interface.proto +0 -31
  306. data/bridge/sdk-core/protos/local/temporal/sdk/core/external_data/external_data.proto +0 -31
  307. data/bridge/sdk-core/protos/local/temporal/sdk/core/workflow_activation/workflow_activation.proto +0 -270
  308. data/bridge/sdk-core/protos/local/temporal/sdk/core/workflow_commands/workflow_commands.proto +0 -305
  309. data/bridge/sdk-core/protos/local/temporal/sdk/core/workflow_completion/workflow_completion.proto +0 -35
  310. data/bridge/sdk-core/protos/testsrv_upstream/api-linter.yaml +0 -38
  311. data/bridge/sdk-core/protos/testsrv_upstream/buf.yaml +0 -13
  312. data/bridge/sdk-core/protos/testsrv_upstream/dependencies/gogoproto/gogo.proto +0 -141
  313. data/bridge/sdk-core/protos/testsrv_upstream/temporal/api/testservice/v1/request_response.proto +0 -63
  314. data/bridge/sdk-core/protos/testsrv_upstream/temporal/api/testservice/v1/service.proto +0 -90
  315. data/bridge/sdk-core/rustfmt.toml +0 -1
  316. data/bridge/sdk-core/sdk/Cargo.toml +0 -48
  317. data/bridge/sdk-core/sdk/LICENSE.txt +0 -23
  318. data/bridge/sdk-core/sdk/src/activity_context.rs +0 -230
  319. data/bridge/sdk-core/sdk/src/app_data.rs +0 -37
  320. data/bridge/sdk-core/sdk/src/interceptors.rs +0 -50
  321. data/bridge/sdk-core/sdk/src/lib.rs +0 -861
  322. data/bridge/sdk-core/sdk/src/payload_converter.rs +0 -11
  323. data/bridge/sdk-core/sdk/src/workflow_context/options.rs +0 -295
  324. data/bridge/sdk-core/sdk/src/workflow_context.rs +0 -694
  325. data/bridge/sdk-core/sdk/src/workflow_future.rs +0 -500
  326. data/bridge/sdk-core/sdk-core-protos/Cargo.toml +0 -33
  327. data/bridge/sdk-core/sdk-core-protos/LICENSE.txt +0 -23
  328. data/bridge/sdk-core/sdk-core-protos/build.rs +0 -142
  329. data/bridge/sdk-core/sdk-core-protos/src/constants.rs +0 -7
  330. data/bridge/sdk-core/sdk-core-protos/src/history_builder.rs +0 -557
  331. data/bridge/sdk-core/sdk-core-protos/src/history_info.rs +0 -234
  332. data/bridge/sdk-core/sdk-core-protos/src/lib.rs +0 -2088
  333. data/bridge/sdk-core/sdk-core-protos/src/task_token.rs +0 -48
  334. data/bridge/sdk-core/sdk-core-protos/src/utilities.rs +0 -14
  335. data/bridge/sdk-core/test-utils/Cargo.toml +0 -38
  336. data/bridge/sdk-core/test-utils/src/canned_histories.rs +0 -1389
  337. data/bridge/sdk-core/test-utils/src/histfetch.rs +0 -28
  338. data/bridge/sdk-core/test-utils/src/lib.rs +0 -709
  339. data/bridge/sdk-core/test-utils/src/wf_input_saver.rs +0 -50
  340. data/bridge/sdk-core/test-utils/src/workflows.rs +0 -29
  341. data/bridge/sdk-core/tests/fuzzy_workflow.rs +0 -130
  342. data/bridge/sdk-core/tests/heavy_tests.rs +0 -265
  343. data/bridge/sdk-core/tests/integ_tests/client_tests.rs +0 -36
  344. data/bridge/sdk-core/tests/integ_tests/ephemeral_server_tests.rs +0 -150
  345. data/bridge/sdk-core/tests/integ_tests/heartbeat_tests.rs +0 -223
  346. data/bridge/sdk-core/tests/integ_tests/metrics_tests.rs +0 -239
  347. data/bridge/sdk-core/tests/integ_tests/polling_tests.rs +0 -90
  348. data/bridge/sdk-core/tests/integ_tests/queries_tests.rs +0 -314
  349. data/bridge/sdk-core/tests/integ_tests/visibility_tests.rs +0 -151
  350. data/bridge/sdk-core/tests/integ_tests/workflow_tests/activities.rs +0 -902
  351. data/bridge/sdk-core/tests/integ_tests/workflow_tests/appdata_propagation.rs +0 -61
  352. data/bridge/sdk-core/tests/integ_tests/workflow_tests/cancel_external.rs +0 -60
  353. data/bridge/sdk-core/tests/integ_tests/workflow_tests/cancel_wf.rs +0 -51
  354. data/bridge/sdk-core/tests/integ_tests/workflow_tests/child_workflows.rs +0 -51
  355. data/bridge/sdk-core/tests/integ_tests/workflow_tests/continue_as_new.rs +0 -64
  356. data/bridge/sdk-core/tests/integ_tests/workflow_tests/determinism.rs +0 -47
  357. data/bridge/sdk-core/tests/integ_tests/workflow_tests/local_activities.rs +0 -669
  358. data/bridge/sdk-core/tests/integ_tests/workflow_tests/modify_wf_properties.rs +0 -54
  359. data/bridge/sdk-core/tests/integ_tests/workflow_tests/patches.rs +0 -92
  360. data/bridge/sdk-core/tests/integ_tests/workflow_tests/replay.rs +0 -228
  361. data/bridge/sdk-core/tests/integ_tests/workflow_tests/resets.rs +0 -94
  362. data/bridge/sdk-core/tests/integ_tests/workflow_tests/signals.rs +0 -171
  363. data/bridge/sdk-core/tests/integ_tests/workflow_tests/stickyness.rs +0 -85
  364. data/bridge/sdk-core/tests/integ_tests/workflow_tests/timers.rs +0 -120
  365. data/bridge/sdk-core/tests/integ_tests/workflow_tests/upsert_search_attrs.rs +0 -77
  366. data/bridge/sdk-core/tests/integ_tests/workflow_tests.rs +0 -596
  367. data/bridge/sdk-core/tests/main.rs +0 -103
  368. data/bridge/sdk-core/tests/runner.rs +0 -132
  369. data/bridge/sdk-core/tests/wf_input_replay.rs +0 -32
  370. data/bridge/src/connection.rs +0 -202
  371. data/bridge/src/lib.rs +0 -494
  372. data/bridge/src/runtime.rs +0 -54
  373. data/bridge/src/test_server.rs +0 -153
  374. data/bridge/src/worker.rs +0 -197
  375. data/ext/Rakefile +0 -9
  376. data/lib/gen/dependencies/gogoproto/gogo_pb.rb +0 -14
  377. data/lib/gen/temporal/api/batch/v1/message_pb.rb +0 -50
  378. data/lib/gen/temporal/api/command/v1/message_pb.rb +0 -160
  379. data/lib/gen/temporal/api/common/v1/message_pb.rb +0 -73
  380. data/lib/gen/temporal/api/enums/v1/batch_operation_pb.rb +0 -33
  381. data/lib/gen/temporal/api/enums/v1/command_type_pb.rb +0 -37
  382. data/lib/gen/temporal/api/enums/v1/common_pb.rb +0 -42
  383. data/lib/gen/temporal/api/enums/v1/event_type_pb.rb +0 -68
  384. data/lib/gen/temporal/api/enums/v1/failed_cause_pb.rb +0 -79
  385. data/lib/gen/temporal/api/enums/v1/namespace_pb.rb +0 -37
  386. data/lib/gen/temporal/api/enums/v1/query_pb.rb +0 -31
  387. data/lib/gen/temporal/api/enums/v1/reset_pb.rb +0 -24
  388. data/lib/gen/temporal/api/enums/v1/schedule_pb.rb +0 -28
  389. data/lib/gen/temporal/api/enums/v1/task_queue_pb.rb +0 -30
  390. data/lib/gen/temporal/api/enums/v1/update_pb.rb +0 -25
  391. data/lib/gen/temporal/api/enums/v1/workflow_pb.rb +0 -89
  392. data/lib/gen/temporal/api/errordetails/v1/message_pb.rb +0 -84
  393. data/lib/gen/temporal/api/failure/v1/message_pb.rb +0 -83
  394. data/lib/gen/temporal/api/filter/v1/message_pb.rb +0 -40
  395. data/lib/gen/temporal/api/history/v1/message_pb.rb +0 -498
  396. data/lib/gen/temporal/api/namespace/v1/message_pb.rb +0 -64
  397. data/lib/gen/temporal/api/operatorservice/v1/request_response_pb.rb +0 -88
  398. data/lib/gen/temporal/api/operatorservice/v1/service_pb.rb +0 -20
  399. data/lib/gen/temporal/api/protocol/v1/message_pb.rb +0 -30
  400. data/lib/gen/temporal/api/query/v1/message_pb.rb +0 -38
  401. data/lib/gen/temporal/api/replication/v1/message_pb.rb +0 -37
  402. data/lib/gen/temporal/api/schedule/v1/message_pb.rb +0 -149
  403. data/lib/gen/temporal/api/sdk/v1/task_complete_metadata_pb.rb +0 -23
  404. data/lib/gen/temporal/api/taskqueue/v1/message_pb.rb +0 -73
  405. data/lib/gen/temporal/api/testservice/v1/request_response_pb.rb +0 -49
  406. data/lib/gen/temporal/api/testservice/v1/service_pb.rb +0 -21
  407. data/lib/gen/temporal/api/update/v1/message_pb.rb +0 -72
  408. data/lib/gen/temporal/api/version/v1/message_pb.rb +0 -41
  409. data/lib/gen/temporal/api/workflow/v1/message_pb.rb +0 -111
  410. data/lib/gen/temporal/api/workflowservice/v1/request_response_pb.rb +0 -798
  411. data/lib/gen/temporal/api/workflowservice/v1/service_pb.rb +0 -20
  412. data/lib/gen/temporal/sdk/core/activity_result/activity_result_pb.rb +0 -62
  413. data/lib/gen/temporal/sdk/core/activity_task/activity_task_pb.rb +0 -61
  414. data/lib/gen/temporal/sdk/core/child_workflow/child_workflow_pb.rb +0 -61
  415. data/lib/gen/temporal/sdk/core/common/common_pb.rb +0 -26
  416. data/lib/gen/temporal/sdk/core/core_interface_pb.rb +0 -40
  417. data/lib/gen/temporal/sdk/core/external_data/external_data_pb.rb +0 -31
  418. data/lib/gen/temporal/sdk/core/workflow_activation/workflow_activation_pb.rb +0 -171
  419. data/lib/gen/temporal/sdk/core/workflow_commands/workflow_commands_pb.rb +0 -200
  420. data/lib/gen/temporal/sdk/core/workflow_completion/workflow_completion_pb.rb +0 -41
  421. data/lib/temporalio/bridge/connect_options.rb +0 -15
  422. data/lib/temporalio/bridge/error.rb +0 -8
  423. data/lib/temporalio/bridge/retry_config.rb +0 -24
  424. data/lib/temporalio/bridge/tls_options.rb +0 -19
  425. data/lib/temporalio/bridge.rb +0 -14
  426. data/lib/temporalio/client/implementation.rb +0 -340
  427. data/lib/temporalio/connection/retry_config.rb +0 -44
  428. data/lib/temporalio/connection/service.rb +0 -20
  429. data/lib/temporalio/connection/test_service.rb +0 -92
  430. data/lib/temporalio/connection/tls_options.rb +0 -51
  431. data/lib/temporalio/connection/workflow_service.rb +0 -731
  432. data/lib/temporalio/connection.rb +0 -86
  433. data/lib/temporalio/data_converter.rb +0 -191
  434. data/lib/temporalio/error/workflow_failure.rb +0 -19
  435. data/lib/temporalio/errors.rb +0 -40
  436. data/lib/temporalio/failure_converter/base.rb +0 -26
  437. data/lib/temporalio/failure_converter/basic.rb +0 -319
  438. data/lib/temporalio/failure_converter.rb +0 -7
  439. data/lib/temporalio/interceptor/activity_inbound.rb +0 -22
  440. data/lib/temporalio/interceptor/activity_outbound.rb +0 -24
  441. data/lib/temporalio/interceptor/chain.rb +0 -28
  442. data/lib/temporalio/interceptor/client.rb +0 -127
  443. data/lib/temporalio/interceptor.rb +0 -22
  444. data/lib/temporalio/payload_codec/base.rb +0 -32
  445. data/lib/temporalio/payload_converter/base.rb +0 -24
  446. data/lib/temporalio/payload_converter/bytes.rb +0 -27
  447. data/lib/temporalio/payload_converter/composite.rb +0 -49
  448. data/lib/temporalio/payload_converter/encoding_base.rb +0 -35
  449. data/lib/temporalio/payload_converter/json.rb +0 -26
  450. data/lib/temporalio/payload_converter/nil.rb +0 -26
  451. data/lib/temporalio/payload_converter.rb +0 -14
  452. data/lib/temporalio/retry_state.rb +0 -35
  453. data/lib/temporalio/testing/time_skipping_handle.rb +0 -32
  454. data/lib/temporalio/testing/time_skipping_interceptor.rb +0 -23
  455. data/lib/temporalio/timeout_type.rb +0 -29
  456. data/lib/temporalio/worker/activity_runner.rb +0 -114
  457. data/lib/temporalio/worker/activity_worker.rb +0 -164
  458. data/lib/temporalio/worker/reactor.rb +0 -46
  459. data/lib/temporalio/worker/runner.rb +0 -63
  460. data/lib/temporalio/worker/sync_worker.rb +0 -124
  461. data/lib/temporalio/worker/thread_pool_executor.rb +0 -51
  462. data/lib/temporalio/workflow/async.rb +0 -46
  463. data/lib/temporalio/workflow/execution_info.rb +0 -54
  464. data/lib/temporalio/workflow/execution_status.rb +0 -36
  465. data/lib/temporalio/workflow/future.rb +0 -138
  466. data/lib/temporalio/workflow/id_reuse_policy.rb +0 -36
  467. data/lib/temporalio/workflow/info.rb +0 -76
  468. data/lib/temporalio/workflow/query_reject_condition.rb +0 -33
  469. data/lib/thermite_patch.rb +0 -33
  470. data/sig/async.rbs +0 -17
  471. data/sig/protobuf.rbs +0 -16
  472. data/sig/protos/dependencies/gogoproto/gogo.rbs +0 -914
  473. data/sig/protos/google/protobuf/any.rbs +0 -157
  474. data/sig/protos/google/protobuf/descriptor.rbs +0 -2825
  475. data/sig/protos/google/protobuf/duration.rbs +0 -114
  476. data/sig/protos/google/protobuf/empty.rbs +0 -36
  477. data/sig/protos/google/protobuf/timestamp.rbs +0 -145
  478. data/sig/protos/google/protobuf/wrappers.rbs +0 -358
  479. data/sig/protos/temporal/api/batch/v1/message.rbs +0 -300
  480. data/sig/protos/temporal/api/command/v1/message.rbs +0 -1399
  481. data/sig/protos/temporal/api/common/v1/message.rbs +0 -528
  482. data/sig/protos/temporal/api/enums/v1/batch_operation.rbs +0 -79
  483. data/sig/protos/temporal/api/enums/v1/command_type.rbs +0 -68
  484. data/sig/protos/temporal/api/enums/v1/common.rbs +0 -118
  485. data/sig/protos/temporal/api/enums/v1/event_type.rbs +0 -264
  486. data/sig/protos/temporal/api/enums/v1/failed_cause.rbs +0 -277
  487. data/sig/protos/temporal/api/enums/v1/namespace.rbs +0 -108
  488. data/sig/protos/temporal/api/enums/v1/query.rbs +0 -81
  489. data/sig/protos/temporal/api/enums/v1/reset.rbs +0 -44
  490. data/sig/protos/temporal/api/enums/v1/schedule.rbs +0 -72
  491. data/sig/protos/temporal/api/enums/v1/task_queue.rbs +0 -92
  492. data/sig/protos/temporal/api/enums/v1/update.rbs +0 -64
  493. data/sig/protos/temporal/api/enums/v1/workflow.rbs +0 -371
  494. data/sig/protos/temporal/api/errordetails/v1/message.rbs +0 -551
  495. data/sig/protos/temporal/api/failure/v1/message.rbs +0 -581
  496. data/sig/protos/temporal/api/filter/v1/message.rbs +0 -171
  497. data/sig/protos/temporal/api/history/v1/message.rbs +0 -4609
  498. data/sig/protos/temporal/api/namespace/v1/message.rbs +0 -410
  499. data/sig/protos/temporal/api/operatorservice/v1/request_response.rbs +0 -643
  500. data/sig/protos/temporal/api/operatorservice/v1/service.rbs +0 -17
  501. data/sig/protos/temporal/api/protocol/v1/message.rbs +0 -84
  502. data/sig/protos/temporal/api/query/v1/message.rbs +0 -182
  503. data/sig/protos/temporal/api/replication/v1/message.rbs +0 -148
  504. data/sig/protos/temporal/api/schedule/v1/message.rbs +0 -1488
  505. data/sig/protos/temporal/api/sdk/v1/task_complete_metadata.rbs +0 -110
  506. data/sig/protos/temporal/api/taskqueue/v1/message.rbs +0 -486
  507. data/sig/protos/temporal/api/testservice/v1/request_response.rbs +0 -249
  508. data/sig/protos/temporal/api/testservice/v1/service.rbs +0 -15
  509. data/sig/protos/temporal/api/update/v1/message.rbs +0 -489
  510. data/sig/protos/temporal/api/version/v1/message.rbs +0 -184
  511. data/sig/protos/temporal/api/workflow/v1/message.rbs +0 -824
  512. data/sig/protos/temporal/api/workflowservice/v1/request_response.rbs +0 -7250
  513. data/sig/protos/temporal/api/workflowservice/v1/service.rbs +0 -22
  514. data/sig/protos/temporal/sdk/core/activity_result/activity_result.rbs +0 -380
  515. data/sig/protos/temporal/sdk/core/activity_task/activity_task.rbs +0 -386
  516. data/sig/protos/temporal/sdk/core/child_workflow/child_workflow.rbs +0 -323
  517. data/sig/protos/temporal/sdk/core/common/common.rbs +0 -62
  518. data/sig/protos/temporal/sdk/core/core_interface.rbs +0 -101
  519. data/sig/protos/temporal/sdk/core/external_data/external_data.rbs +0 -119
  520. data/sig/protos/temporal/sdk/core/workflow_activation/workflow_activation.rbs +0 -1473
  521. data/sig/protos/temporal/sdk/core/workflow_commands/workflow_commands.rbs +0 -1784
  522. data/sig/protos/temporal/sdk/core/workflow_completion/workflow_completion.rbs +0 -180
  523. data/sig/ruby.rbs +0 -12
  524. data/sig/temporalio/activity/context.rbs +0 -29
  525. data/sig/temporalio/activity/info.rbs +0 -43
  526. data/sig/temporalio/activity.rbs +0 -19
  527. data/sig/temporalio/bridge/connect_options.rbs +0 -19
  528. data/sig/temporalio/bridge/error.rbs +0 -8
  529. data/sig/temporalio/bridge/retry_config.rbs +0 -21
  530. data/sig/temporalio/bridge/tls_options.rbs +0 -17
  531. data/sig/temporalio/bridge.rbs +0 -71
  532. data/sig/temporalio/client/implementation.rbs +0 -38
  533. data/sig/temporalio/client/workflow_handle.rbs +0 -41
  534. data/sig/temporalio/client.rbs +0 -35
  535. data/sig/temporalio/connection/retry_config.rbs +0 -37
  536. data/sig/temporalio/connection/service.rbs +0 -14
  537. data/sig/temporalio/connection/test_service.rbs +0 -13
  538. data/sig/temporalio/connection/tls_options.rbs +0 -43
  539. data/sig/temporalio/connection/workflow_service.rbs +0 -48
  540. data/sig/temporalio/connection.rbs +0 -30
  541. data/sig/temporalio/data_converter.rbs +0 -35
  542. data/sig/temporalio/error/failure.rbs +0 -121
  543. data/sig/temporalio/error/workflow_failure.rbs +0 -9
  544. data/sig/temporalio/errors.rbs +0 -36
  545. data/sig/temporalio/failure_converter/base.rbs +0 -12
  546. data/sig/temporalio/failure_converter/basic.rbs +0 -86
  547. data/sig/temporalio/failure_converter.rbs +0 -5
  548. data/sig/temporalio/interceptor/activity_inbound.rbs +0 -21
  549. data/sig/temporalio/interceptor/activity_outbound.rbs +0 -10
  550. data/sig/temporalio/interceptor/chain.rbs +0 -24
  551. data/sig/temporalio/interceptor/client.rbs +0 -148
  552. data/sig/temporalio/interceptor.rbs +0 -6
  553. data/sig/temporalio/payload_codec/base.rbs +0 -12
  554. data/sig/temporalio/payload_converter/base.rbs +0 -12
  555. data/sig/temporalio/payload_converter/bytes.rbs +0 -9
  556. data/sig/temporalio/payload_converter/composite.rbs +0 -19
  557. data/sig/temporalio/payload_converter/encoding_base.rbs +0 -14
  558. data/sig/temporalio/payload_converter/json.rbs +0 -9
  559. data/sig/temporalio/payload_converter/nil.rbs +0 -9
  560. data/sig/temporalio/payload_converter.rbs +0 -5
  561. data/sig/temporalio/retry_policy.rbs +0 -25
  562. data/sig/temporalio/retry_state.rbs +0 -20
  563. data/sig/temporalio/runtime.rbs +0 -12
  564. data/sig/temporalio/testing/time_skipping_handle.rbs +0 -15
  565. data/sig/temporalio/testing/time_skipping_interceptor.rbs +0 -13
  566. data/sig/temporalio/testing/workflow_environment.rbs +0 -22
  567. data/sig/temporalio/testing.rbs +0 -35
  568. data/sig/temporalio/timeout_type.rbs +0 -15
  569. data/sig/temporalio/version.rbs +0 -3
  570. data/sig/temporalio/worker/activity_runner.rbs +0 -35
  571. data/sig/temporalio/worker/activity_worker.rbs +0 -44
  572. data/sig/temporalio/worker/reactor.rbs +0 -22
  573. data/sig/temporalio/worker/runner.rbs +0 -21
  574. data/sig/temporalio/worker/sync_worker.rbs +0 -23
  575. data/sig/temporalio/worker/thread_pool_executor.rbs +0 -23
  576. data/sig/temporalio/worker.rbs +0 -46
  577. data/sig/temporalio/workflow/async.rbs +0 -9
  578. data/sig/temporalio/workflow/execution_info.rbs +0 -55
  579. data/sig/temporalio/workflow/execution_status.rbs +0 -21
  580. data/sig/temporalio/workflow/future.rbs +0 -40
  581. data/sig/temporalio/workflow/id_reuse_policy.rbs +0 -15
  582. data/sig/temporalio/workflow/info.rbs +0 -55
  583. data/sig/temporalio/workflow/query_reject_condition.rbs +0 -14
  584. data/sig/temporalio.rbs +0 -2
  585. data/sig/thermite_patch.rbs +0 -15
@@ -1,861 +0,0 @@
1
- #![warn(missing_docs)] // error if there are missing docs
2
-
3
- //! This crate defines an alpha-stage Temporal Rust SDK.
4
- //!
5
- //! Currently defining activities and running an activity-only worker is the most stable code.
6
- //! Workflow definitions exist and running a workflow worker works, but the API is still very
7
- //! unstable.
8
- //!
9
- //! An example of running an activity worker:
10
- //! ```no_run
11
- //! use std::{str::FromStr, sync::Arc};
12
- //! use temporal_sdk::{sdk_client_options, ActContext, Worker};
13
- //! use temporal_sdk_core::{init_worker, Url, CoreRuntime};
14
- //! use temporal_sdk_core_api::{worker::WorkerConfigBuilder, telemetry::TelemetryOptionsBuilder};
15
- //!
16
- //! #[tokio::main]
17
- //! async fn main() -> Result<(), Box<dyn std::error::Error>> {
18
- //! let server_options = sdk_client_options(Url::from_str("http://localhost:7233")?).build()?;
19
- //!
20
- //! let client = server_options.connect("default", None, None).await?;
21
- //!
22
- //! let telemetry_options = TelemetryOptionsBuilder::default().build()?;
23
- //! let runtime = CoreRuntime::new_assume_tokio(telemetry_options)?;
24
- //!
25
- //! let worker_config = WorkerConfigBuilder::default()
26
- //! .namespace("default")
27
- //! .task_queue("task_queue")
28
- //! .build()?;
29
- //!
30
- //! let core_worker = init_worker(&runtime, worker_config, client)?;
31
- //!
32
- //! let mut worker = Worker::new_from_core(Arc::new(core_worker), "task_queue");
33
- //! worker.register_activity(
34
- //! "echo_activity",
35
- //! |_ctx: ActContext, echo_me: String| async move { Ok(echo_me) },
36
- //! );
37
- //!
38
- //! worker.run().await?;
39
- //!
40
- //! Ok(())
41
- //! }
42
- //! ```
43
-
44
- #[macro_use]
45
- extern crate tracing;
46
-
47
- mod activity_context;
48
- mod app_data;
49
- pub mod interceptors;
50
- mod payload_converter;
51
- mod workflow_context;
52
- mod workflow_future;
53
-
54
- pub use activity_context::ActContext;
55
- pub use temporal_client::Namespace;
56
- pub use workflow_context::{
57
- ActivityOptions, CancellableFuture, ChildWorkflow, ChildWorkflowOptions, LocalActivityOptions,
58
- Signal, SignalData, SignalWorkflowOptions, WfContext,
59
- };
60
-
61
- use crate::{
62
- interceptors::WorkerInterceptor,
63
- workflow_context::{ChildWfCommon, PendingChildWorkflow},
64
- };
65
- use anyhow::{anyhow, bail, Context};
66
- use app_data::AppData;
67
- use futures::{future::BoxFuture, FutureExt, StreamExt, TryFutureExt, TryStreamExt};
68
- use std::{
69
- any::{Any, TypeId},
70
- cell::RefCell,
71
- collections::HashMap,
72
- fmt::{Debug, Display, Formatter},
73
- future::Future,
74
- panic::AssertUnwindSafe,
75
- sync::Arc,
76
- };
77
- use temporal_client::ClientOptionsBuilder;
78
- use temporal_sdk_core::Url;
79
- use temporal_sdk_core_api::{
80
- errors::{PollActivityError, PollWfError},
81
- Worker as CoreWorker,
82
- };
83
- use temporal_sdk_core_protos::{
84
- coresdk::{
85
- activity_result::{ActivityExecutionResult, ActivityResolution},
86
- activity_task::{activity_task, ActivityTask},
87
- child_workflow::ChildWorkflowResult,
88
- common::NamespacedWorkflowExecution,
89
- workflow_activation::{
90
- resolve_child_workflow_execution_start::Status as ChildWorkflowStartStatus,
91
- workflow_activation_job::Variant, WorkflowActivation, WorkflowActivationJob,
92
- },
93
- workflow_commands::{workflow_command, ContinueAsNewWorkflowExecution},
94
- workflow_completion::WorkflowActivationCompletion,
95
- ActivityTaskCompletion, AsJsonPayloadExt, FromJsonPayloadExt,
96
- },
97
- temporal::api::{common::v1::Payload, failure::v1::Failure},
98
- TaskToken,
99
- };
100
- use tokio::{
101
- sync::{
102
- mpsc::{unbounded_channel, UnboundedSender},
103
- oneshot,
104
- },
105
- task::JoinError,
106
- };
107
- use tokio_stream::wrappers::UnboundedReceiverStream;
108
- use tokio_util::sync::CancellationToken;
109
-
110
- const VERSION: &str = env!("CARGO_PKG_VERSION");
111
-
112
- /// Returns a [ClientOptionsBuilder] with required fields set to appropriate values
113
- /// for the Rust SDK.
114
- pub fn sdk_client_options(url: impl Into<Url>) -> ClientOptionsBuilder {
115
- let mut builder = ClientOptionsBuilder::default();
116
- builder
117
- .target_url(url)
118
- .client_name("rust-sdk".to_string())
119
- .client_version(VERSION.to_string());
120
-
121
- builder
122
- }
123
-
124
- /// A worker that can poll for and respond to workflow tasks by using [WorkflowFunction]s,
125
- /// and activity tasks by using [ActivityFunction]s
126
- pub struct Worker {
127
- common: CommonWorker,
128
- workflow_half: WorkflowHalf,
129
- activity_half: ActivityHalf,
130
- app_data: Option<AppData>,
131
- }
132
-
133
- struct CommonWorker {
134
- worker: Arc<dyn CoreWorker>,
135
- task_queue: String,
136
- worker_interceptor: Option<Box<dyn WorkerInterceptor>>,
137
- }
138
-
139
- struct WorkflowHalf {
140
- /// Maps run id to cached workflow state
141
- workflows: RefCell<HashMap<String, WorkflowData>>,
142
- /// Maps workflow type to the function for executing workflow runs with that ID
143
- workflow_fns: RefCell<HashMap<String, WorkflowFunction>>,
144
- }
145
- struct WorkflowData {
146
- /// Channel used to send the workflow activations
147
- activation_chan: UnboundedSender<WorkflowActivation>,
148
- }
149
-
150
- struct WorkflowFutureHandle<F: Future<Output = Result<WorkflowResult<()>, JoinError>>> {
151
- join_handle: F,
152
- run_id: String,
153
- }
154
-
155
- struct ActivityHalf {
156
- /// Maps activity type to the function for executing activities of that type
157
- activity_fns: HashMap<String, ActivityFunction>,
158
- task_tokens_to_cancels: HashMap<TaskToken, CancellationToken>,
159
- }
160
-
161
- impl Worker {
162
- /// Create a new Rust SDK worker from a core worker
163
- pub fn new_from_core(worker: Arc<dyn CoreWorker>, task_queue: impl Into<String>) -> Self {
164
- Self {
165
- common: CommonWorker {
166
- worker,
167
- task_queue: task_queue.into(),
168
- worker_interceptor: None,
169
- },
170
- workflow_half: WorkflowHalf {
171
- workflows: Default::default(),
172
- workflow_fns: Default::default(),
173
- },
174
- activity_half: ActivityHalf {
175
- activity_fns: Default::default(),
176
- task_tokens_to_cancels: Default::default(),
177
- },
178
- app_data: Some(Default::default()),
179
- }
180
- }
181
-
182
- /// Returns the task queue name this worker polls on
183
- pub fn task_queue(&self) -> &str {
184
- &self.common.task_queue
185
- }
186
-
187
- /// Return a handle that can be used to initiate shutdown.
188
- /// TODO: Doc better after shutdown changes
189
- pub fn shutdown_handle(&self) -> impl Fn() {
190
- let w = self.common.worker.clone();
191
- move || w.initiate_shutdown()
192
- }
193
-
194
- /// Register a Workflow function to invoke when the Worker is asked to run a workflow of
195
- /// `workflow_type`
196
- pub fn register_wf<F: Into<WorkflowFunction>>(
197
- &mut self,
198
- workflow_type: impl Into<String>,
199
- wf_function: F,
200
- ) {
201
- self.workflow_half
202
- .workflow_fns
203
- .get_mut()
204
- .insert(workflow_type.into(), wf_function.into());
205
- }
206
-
207
- /// Register an Activity function to invoke when the Worker is asked to run an activity of
208
- /// `activity_type`
209
- pub fn register_activity<A, R, O>(
210
- &mut self,
211
- activity_type: impl Into<String>,
212
- act_function: impl IntoActivityFunc<A, R, O>,
213
- ) {
214
- self.activity_half.activity_fns.insert(
215
- activity_type.into(),
216
- ActivityFunction {
217
- act_func: act_function.into_activity_fn(),
218
- },
219
- );
220
- }
221
-
222
- /// Insert Custom App Context for Workflows and Activities
223
- pub fn insert_app_data<T: Send + Sync + 'static>(&mut self, data: T) {
224
- self.app_data.as_mut().map(|a| a.insert(data));
225
- }
226
-
227
- /// Runs the worker. Eventually resolves after the worker has been explicitly shut down,
228
- /// or may return early with an error in the event of some unresolvable problem.
229
- pub async fn run(&mut self) -> Result<(), anyhow::Error> {
230
- let shutdown_token = CancellationToken::new();
231
- let (common, wf_half, act_half, app_data) = self.split_apart();
232
- let safe_app_data = Arc::new(
233
- app_data
234
- .take()
235
- .ok_or_else(|| anyhow!("app_data should exist on run"))?,
236
- );
237
- let (wf_future_tx, wf_future_rx) = unbounded_channel();
238
- let (completions_tx, completions_rx) = unbounded_channel();
239
- let wf_future_joiner = async {
240
- UnboundedReceiverStream::new(wf_future_rx)
241
- .map(Result::<_, anyhow::Error>::Ok)
242
- .try_for_each_concurrent(
243
- None,
244
- |WorkflowFutureHandle {
245
- join_handle,
246
- run_id,
247
- }| {
248
- let wf_half = &*wf_half;
249
- async move {
250
- join_handle.await??;
251
- info!(run_id=%run_id, "Removing workflow from cache");
252
- wf_half.workflows.borrow_mut().remove(&run_id);
253
- Ok(())
254
- }
255
- },
256
- )
257
- .await
258
- .context("Workflow futures encountered an error")
259
- };
260
- let wf_completion_processor = async {
261
- UnboundedReceiverStream::new(completions_rx)
262
- .map(Ok)
263
- .try_for_each_concurrent(None, |completion| async {
264
- if let Some(ref i) = common.worker_interceptor {
265
- i.on_workflow_activation_completion(&completion).await;
266
- }
267
- common.worker.complete_workflow_activation(completion).await
268
- })
269
- .map_err(anyhow::Error::from)
270
- .await
271
- .context("Workflow completions processor encountered an error")
272
- };
273
- tokio::try_join!(
274
- // Workflow polling loop
275
- async {
276
- loop {
277
- let activation = match common.worker.poll_workflow_activation().await {
278
- Err(PollWfError::ShutDown) => {
279
- break;
280
- }
281
- o => o?,
282
- };
283
- if let Some(ref i) = common.worker_interceptor {
284
- i.on_workflow_activation(&activation).await?;
285
- }
286
- if let Some(wf_fut) = wf_half.workflow_activation_handler(
287
- common,
288
- shutdown_token.clone(),
289
- activation,
290
- &completions_tx,
291
- )? {
292
- if wf_future_tx.send(wf_fut).is_err() {
293
- panic!(
294
- "Receive half of completion processor channel cannot be dropped"
295
- );
296
- }
297
- }
298
- }
299
- // Tell still-alive workflows to evict themselves
300
- shutdown_token.cancel();
301
- // It's important to drop these so the future and completion processors will
302
- // terminate.
303
- drop(wf_future_tx);
304
- drop(completions_tx);
305
- Result::<_, anyhow::Error>::Ok(())
306
- },
307
- // Only poll on the activity queue if activity functions have been registered. This
308
- // makes tests which use mocks dramatically more manageable.
309
- async {
310
- if !act_half.activity_fns.is_empty() {
311
- loop {
312
- let activity = common.worker.poll_activity_task().await;
313
- if matches!(activity, Err(PollActivityError::ShutDown)) {
314
- break;
315
- }
316
- act_half.activity_task_handler(
317
- common.worker.clone(),
318
- safe_app_data.clone(),
319
- common.task_queue.clone(),
320
- activity?,
321
- )?;
322
- }
323
- };
324
- Result::<_, anyhow::Error>::Ok(())
325
- },
326
- wf_future_joiner,
327
- wf_completion_processor,
328
- )?;
329
-
330
- info!("Polling loops exited");
331
- if let Some(i) = self.common.worker_interceptor.as_ref() {
332
- i.on_shutdown(self);
333
- }
334
- self.common.worker.shutdown().await;
335
- debug!("Worker shutdown complete");
336
- self.app_data = Some(
337
- Arc::try_unwrap(safe_app_data)
338
- .map_err(|_| anyhow!("some references of AppData exist on worker shutdown"))?,
339
- );
340
- Ok(())
341
- }
342
-
343
- /// Set a [WorkerInterceptor]
344
- pub fn set_worker_interceptor(&mut self, interceptor: Box<dyn WorkerInterceptor>) {
345
- self.common.worker_interceptor = Some(interceptor);
346
- }
347
-
348
- /// Turns this rust worker into a new worker with all the same workflows and activities
349
- /// registered, but with a new underlying core worker. Can be used to swap the worker for
350
- /// a replay worker, change task queues, etc.
351
- pub fn with_new_core_worker(&mut self, new_core_worker: Arc<dyn CoreWorker>) {
352
- self.common.worker = new_core_worker;
353
- }
354
-
355
- /// Returns number of currently cached workflows as understood by the SDK. Importantly, this
356
- /// is not the same as understood by core, though they *should* always be in sync.
357
- pub fn cached_workflows(&self) -> usize {
358
- self.workflow_half.workflows.borrow().len()
359
- }
360
-
361
- fn split_apart(
362
- &mut self,
363
- ) -> (
364
- &mut CommonWorker,
365
- &mut WorkflowHalf,
366
- &mut ActivityHalf,
367
- &mut Option<AppData>,
368
- ) {
369
- (
370
- &mut self.common,
371
- &mut self.workflow_half,
372
- &mut self.activity_half,
373
- &mut self.app_data,
374
- )
375
- }
376
- }
377
-
378
- impl WorkflowHalf {
379
- fn workflow_activation_handler(
380
- &self,
381
- common: &CommonWorker,
382
- shutdown_token: CancellationToken,
383
- activation: WorkflowActivation,
384
- completions_tx: &UnboundedSender<WorkflowActivationCompletion>,
385
- ) -> Result<
386
- Option<WorkflowFutureHandle<impl Future<Output = Result<WorkflowResult<()>, JoinError>>>>,
387
- anyhow::Error,
388
- > {
389
- let mut res = None;
390
- let run_id = activation.run_id.clone();
391
-
392
- // If the activation is to start a workflow, create a new workflow driver for it,
393
- // using the function associated with that workflow id
394
- if let Some(WorkflowActivationJob {
395
- variant: Some(Variant::StartWorkflow(sw)),
396
- }) = activation.jobs.get(0)
397
- {
398
- let workflow_type = &sw.workflow_type;
399
- let wf_fns_borrow = self.workflow_fns.borrow();
400
- let wf_function = wf_fns_borrow
401
- .get(workflow_type)
402
- .ok_or_else(|| anyhow!("Workflow type {workflow_type} not found"))?;
403
-
404
- let (wff, activations) = wf_function.start_workflow(
405
- common.worker.get_config().namespace.clone(),
406
- common.task_queue.clone(),
407
- // NOTE: Don't clone args if this gets ported to be a non-test rust worker
408
- sw.arguments.clone(),
409
- completions_tx.clone(),
410
- );
411
- let jh = tokio::spawn(async move {
412
- tokio::select! {
413
- r = wff.fuse() => r,
414
- // TODO: This probably shouldn't abort early, as it could cause an in-progress
415
- // complete to abort. Send synthetic remove activation
416
- _ = shutdown_token.cancelled() => {
417
- Ok(WfExitValue::Evicted)
418
- }
419
- }
420
- });
421
- res = Some(WorkflowFutureHandle {
422
- join_handle: jh,
423
- run_id: run_id.clone(),
424
- });
425
- self.workflows.borrow_mut().insert(
426
- run_id.clone(),
427
- WorkflowData {
428
- activation_chan: activations,
429
- },
430
- );
431
- }
432
-
433
- // The activation is expected to apply to some workflow we know about. Use it to
434
- // unblock things and advance the workflow.
435
- if let Some(dat) = self.workflows.borrow_mut().get_mut(&run_id) {
436
- dat.activation_chan
437
- .send(activation)
438
- .expect("Workflow should exist if we're sending it an activation");
439
- } else {
440
- bail!(
441
- "Got activation {:?} for unknown workflow {}",
442
- activation,
443
- run_id
444
- );
445
- };
446
-
447
- Ok(res)
448
- }
449
- }
450
-
451
- impl ActivityHalf {
452
- /// Spawns off a task to handle the provided activity task
453
- fn activity_task_handler(
454
- &mut self,
455
- worker: Arc<dyn CoreWorker>,
456
- app_data: Arc<AppData>,
457
- task_queue: String,
458
- activity: ActivityTask,
459
- ) -> Result<(), anyhow::Error> {
460
- match activity.variant {
461
- Some(activity_task::Variant::Start(start)) => {
462
- let act_fn = self
463
- .activity_fns
464
- .get(&start.activity_type)
465
- .ok_or_else(|| {
466
- anyhow!(
467
- "No function registered for activity type {}",
468
- start.activity_type
469
- )
470
- })?
471
- .clone();
472
- let ct = CancellationToken::new();
473
- let task_token = activity.task_token;
474
- self.task_tokens_to_cancels
475
- .insert(task_token.clone().into(), ct.clone());
476
-
477
- let (ctx, arg) = ActContext::new(
478
- worker.clone(),
479
- app_data,
480
- ct,
481
- task_queue,
482
- task_token.clone(),
483
- start,
484
- );
485
- tokio::spawn(async move {
486
- let output = AssertUnwindSafe((act_fn.act_func)(ctx, arg))
487
- .catch_unwind()
488
- .await;
489
- let result = match output {
490
- Err(e) => ActivityExecutionResult::fail(Failure::application_failure(
491
- format!("Activity function panicked: {}", panic_formatter(e)),
492
- true,
493
- )),
494
- Ok(Ok(ActExitValue::Normal(p))) => ActivityExecutionResult::ok(p),
495
- Ok(Ok(ActExitValue::WillCompleteAsync)) => {
496
- ActivityExecutionResult::will_complete_async()
497
- }
498
- Ok(Err(err)) => match err.downcast::<ActivityCancelledError>() {
499
- Ok(ce) => ActivityExecutionResult::cancel_from_details(ce.details),
500
- Err(other_err) => {
501
- match other_err.downcast::<NonRetryableActivityError>() {
502
- Ok(nre) => ActivityExecutionResult::fail(
503
- Failure::application_failure_from_error(nre.into(), true),
504
- ),
505
- Err(other_err) => ActivityExecutionResult::fail(
506
- Failure::application_failure_from_error(other_err, false),
507
- ),
508
- }
509
- }
510
- },
511
- };
512
- worker
513
- .complete_activity_task(ActivityTaskCompletion {
514
- task_token,
515
- result: Some(result),
516
- })
517
- .await?;
518
- Ok::<_, anyhow::Error>(())
519
- });
520
- }
521
- Some(activity_task::Variant::Cancel(_)) => {
522
- if let Some(ct) = self.task_tokens_to_cancels.get(&activity.task_token.into()) {
523
- ct.cancel();
524
- }
525
- }
526
- None => bail!("Undefined activity task variant"),
527
- }
528
- Ok(())
529
- }
530
- }
531
-
532
- #[derive(Debug)]
533
- enum UnblockEvent {
534
- Timer(u32, TimerResult),
535
- Activity(u32, Box<ActivityResolution>),
536
- WorkflowStart(u32, Box<ChildWorkflowStartStatus>),
537
- WorkflowComplete(u32, Box<ChildWorkflowResult>),
538
- SignalExternal(u32, Option<Failure>),
539
- CancelExternal(u32, Option<Failure>),
540
- }
541
-
542
- /// Result of awaiting on a timer
543
- #[derive(Debug, Copy, Clone)]
544
- pub enum TimerResult {
545
- /// The timer was cancelled
546
- Cancelled,
547
- /// The timer elapsed and fired
548
- Fired,
549
- }
550
-
551
- /// Successful result of sending a signal to an external workflow
552
- pub struct SignalExternalOk;
553
- /// Result of awaiting on sending a signal to an external workflow
554
- pub type SignalExternalWfResult = Result<SignalExternalOk, Failure>;
555
-
556
- /// Successful result of sending a cancel request to an external workflow
557
- pub struct CancelExternalOk;
558
- /// Result of awaiting on sending a cancel request to an external workflow
559
- pub type CancelExternalWfResult = Result<CancelExternalOk, Failure>;
560
-
561
- trait Unblockable {
562
- type OtherDat;
563
-
564
- fn unblock(ue: UnblockEvent, od: Self::OtherDat) -> Self;
565
- }
566
-
567
- impl Unblockable for TimerResult {
568
- type OtherDat = ();
569
- fn unblock(ue: UnblockEvent, _: Self::OtherDat) -> Self {
570
- match ue {
571
- UnblockEvent::Timer(_, result) => result,
572
- _ => panic!("Invalid unblock event for timer"),
573
- }
574
- }
575
- }
576
-
577
- impl Unblockable for ActivityResolution {
578
- type OtherDat = ();
579
- fn unblock(ue: UnblockEvent, _: Self::OtherDat) -> Self {
580
- match ue {
581
- UnblockEvent::Activity(_, result) => *result,
582
- _ => panic!("Invalid unblock event for activity"),
583
- }
584
- }
585
- }
586
-
587
- impl Unblockable for PendingChildWorkflow {
588
- // Other data here is workflow id
589
- type OtherDat = ChildWfCommon;
590
- fn unblock(ue: UnblockEvent, od: Self::OtherDat) -> Self {
591
- match ue {
592
- UnblockEvent::WorkflowStart(_, result) => Self {
593
- status: *result,
594
- common: od,
595
- },
596
- _ => panic!("Invalid unblock event for child workflow start"),
597
- }
598
- }
599
- }
600
-
601
- impl Unblockable for ChildWorkflowResult {
602
- type OtherDat = ();
603
- fn unblock(ue: UnblockEvent, _: Self::OtherDat) -> Self {
604
- match ue {
605
- UnblockEvent::WorkflowComplete(_, result) => *result,
606
- _ => panic!("Invalid unblock event for child workflow complete"),
607
- }
608
- }
609
- }
610
-
611
- impl Unblockable for SignalExternalWfResult {
612
- type OtherDat = ();
613
- fn unblock(ue: UnblockEvent, _: Self::OtherDat) -> Self {
614
- match ue {
615
- UnblockEvent::SignalExternal(_, maybefail) => {
616
- maybefail.map_or(Ok(SignalExternalOk), Err)
617
- }
618
- _ => panic!("Invalid unblock event for signal external workflow result"),
619
- }
620
- }
621
- }
622
-
623
- impl Unblockable for CancelExternalWfResult {
624
- type OtherDat = ();
625
- fn unblock(ue: UnblockEvent, _: Self::OtherDat) -> Self {
626
- match ue {
627
- UnblockEvent::CancelExternal(_, maybefail) => {
628
- maybefail.map_or(Ok(CancelExternalOk), Err)
629
- }
630
- _ => panic!("Invalid unblock event for signal external workflow result"),
631
- }
632
- }
633
- }
634
-
635
- /// Identifier for cancellable operations
636
- #[derive(Debug, Clone)]
637
- pub enum CancellableID {
638
- /// Timer sequence number
639
- Timer(u32),
640
- /// Activity sequence number
641
- Activity(u32),
642
- /// Activity sequence number
643
- LocalActivity(u32),
644
- /// Start child sequence number
645
- ChildWorkflow(u32),
646
- /// Signal workflow
647
- SignalExternalWorkflow(u32),
648
- /// An external workflow identifier as may have been created by a started child workflow
649
- ExternalWorkflow {
650
- /// Sequence number which will be used for the cancel command
651
- seqnum: u32,
652
- /// Identifying information about the workflow to be cancelled
653
- execution: NamespacedWorkflowExecution,
654
- /// Set to true if this workflow is a child of the issuing workflow
655
- only_child: bool,
656
- },
657
- }
658
-
659
- #[derive(derive_more::From)]
660
- #[allow(clippy::large_enum_variant)]
661
- enum RustWfCmd {
662
- #[from(ignore)]
663
- Cancel(CancellableID),
664
- ForceWFTFailure(anyhow::Error),
665
- NewCmd(CommandCreateRequest),
666
- NewNonblockingCmd(workflow_command::Variant),
667
- SubscribeChildWorkflowCompletion(CommandSubscribeChildWorkflowCompletion),
668
- SubscribeSignal(String, UnboundedSender<SignalData>),
669
- }
670
-
671
- struct CommandCreateRequest {
672
- cmd: workflow_command::Variant,
673
- unblocker: oneshot::Sender<UnblockEvent>,
674
- }
675
-
676
- struct CommandSubscribeChildWorkflowCompletion {
677
- seq: u32,
678
- unblocker: oneshot::Sender<UnblockEvent>,
679
- }
680
-
681
- type WfFunc = dyn Fn(WfContext) -> BoxFuture<'static, WorkflowResult<()>> + Send + Sync + 'static;
682
-
683
- /// The user's async function / workflow code
684
- pub struct WorkflowFunction {
685
- wf_func: Box<WfFunc>,
686
- }
687
-
688
- impl<F, Fut> From<F> for WorkflowFunction
689
- where
690
- F: Fn(WfContext) -> Fut + Send + Sync + 'static,
691
- Fut: Future<Output = WorkflowResult<()>> + Send + 'static,
692
- {
693
- fn from(wf_func: F) -> Self {
694
- Self::new(wf_func)
695
- }
696
- }
697
-
698
- impl WorkflowFunction {
699
- /// Build a workflow function from a closure or function pointer which accepts a [WfContext]
700
- pub fn new<F, Fut>(wf_func: F) -> Self
701
- where
702
- F: Fn(WfContext) -> Fut + Send + Sync + 'static,
703
- Fut: Future<Output = WorkflowResult<()>> + Send + 'static,
704
- {
705
- Self {
706
- wf_func: Box::new(move |ctx: WfContext| wf_func(ctx).boxed()),
707
- }
708
- }
709
- }
710
-
711
- /// The result of running a workflow
712
- pub type WorkflowResult<T> = Result<WfExitValue<T>, anyhow::Error>;
713
-
714
- /// Workflow functions may return these values when exiting
715
- #[derive(Debug, derive_more::From)]
716
- pub enum WfExitValue<T: Debug> {
717
- /// Continue the workflow as a new execution
718
- #[from(ignore)]
719
- ContinueAsNew(Box<ContinueAsNewWorkflowExecution>),
720
- /// Confirm the workflow was cancelled (can be automatic in a more advanced iteration)
721
- #[from(ignore)]
722
- Cancelled,
723
- /// The run was evicted
724
- #[from(ignore)]
725
- Evicted,
726
- /// Finish with a result
727
- Normal(T),
728
- }
729
-
730
- impl<T: Debug> WfExitValue<T> {
731
- /// Construct a [WfExitValue::ContinueAsNew] variant (handles boxing)
732
- pub fn continue_as_new(can: ContinueAsNewWorkflowExecution) -> Self {
733
- Self::ContinueAsNew(Box::new(can))
734
- }
735
- }
736
-
737
- /// Activity functions may return these values when exiting
738
- #[derive(derive_more::From)]
739
- pub enum ActExitValue<T: Debug> {
740
- /// Completion requires an asynchronous callback
741
- #[from(ignore)]
742
- WillCompleteAsync,
743
- /// Finish with a result
744
- Normal(T),
745
- }
746
-
747
- type BoxActFn = Arc<
748
- dyn Fn(ActContext, Payload) -> BoxFuture<'static, Result<ActExitValue<Payload>, anyhow::Error>>
749
- + Send
750
- + Sync,
751
- >;
752
-
753
- /// Container for user-defined activity functions
754
- #[derive(Clone)]
755
- pub struct ActivityFunction {
756
- act_func: BoxActFn,
757
- }
758
-
759
- /// Return this error to indicate your activity is cancelling
760
- #[derive(Debug, Default)]
761
- pub struct ActivityCancelledError {
762
- details: Option<Payload>,
763
- }
764
- impl ActivityCancelledError {
765
- /// Include some details as part of concluding the activity as cancelled
766
- pub fn with_details(payload: Payload) -> Self {
767
- Self {
768
- details: Some(payload),
769
- }
770
- }
771
- }
772
- impl std::error::Error for ActivityCancelledError {}
773
- impl Display for ActivityCancelledError {
774
- fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
775
- write!(f, "Activity cancelled")
776
- }
777
- }
778
-
779
- /// Return this error to indicate that your activity non-retryable
780
- /// this is a transparent wrapper around anyhow Error so essentially any type of error
781
- /// could be used here.
782
- ///
783
- /// In your activity function. Return something along the lines of:
784
- /// `Err(NonRetryableActivityError(anyhow::anyhow!("This should *not* be retried")).into())`
785
- #[derive(Debug, thiserror::Error)]
786
- #[error(transparent)]
787
- pub struct NonRetryableActivityError(pub anyhow::Error);
788
-
789
- /// Closures / functions which can be turned into activity functions implement this trait
790
- pub trait IntoActivityFunc<Args, Res, Out> {
791
- /// Consume the closure or fn pointer and turned it into a boxed activity function
792
- fn into_activity_fn(self) -> BoxActFn;
793
- }
794
-
795
- impl<A, Rf, R, O, F> IntoActivityFunc<A, Rf, O> for F
796
- where
797
- F: (Fn(ActContext, A) -> Rf) + Sync + Send + 'static,
798
- A: FromJsonPayloadExt + Send,
799
- Rf: Future<Output = Result<R, anyhow::Error>> + Send + 'static,
800
- R: Into<ActExitValue<O>>,
801
- O: AsJsonPayloadExt + Debug,
802
- {
803
- fn into_activity_fn(self) -> BoxActFn {
804
- let wrapper = move |ctx: ActContext, input: Payload| {
805
- // Some minor gymnastics are required to avoid needing to clone the function
806
- match A::from_json_payload(&input) {
807
- Ok(deser) => (self)(ctx, deser)
808
- .map(|r| {
809
- r.and_then(|r| {
810
- let exit_val: ActExitValue<O> = r.into();
811
- Ok(match exit_val {
812
- ActExitValue::WillCompleteAsync => ActExitValue::WillCompleteAsync,
813
- ActExitValue::Normal(x) => {
814
- ActExitValue::Normal(x.as_json_payload()?)
815
- }
816
- })
817
- })
818
- })
819
- .boxed(),
820
- Err(e) => async move { Err(e.into()) }.boxed(),
821
- }
822
- };
823
- Arc::new(wrapper)
824
- }
825
- }
826
-
827
- /// Attempts to turn caught panics into something printable
828
- fn panic_formatter(panic: Box<dyn Any>) -> Box<dyn Display> {
829
- _panic_formatter::<&str>(panic)
830
- }
831
- fn _panic_formatter<T: 'static + PrintablePanicType>(panic: Box<dyn Any>) -> Box<dyn Display> {
832
- match panic.downcast::<T>() {
833
- Ok(d) => d,
834
- Err(orig) => {
835
- if TypeId::of::<<T as PrintablePanicType>::NextType>()
836
- == TypeId::of::<EndPrintingAttempts>()
837
- {
838
- return Box::new("Couldn't turn panic into a string");
839
- }
840
- _panic_formatter::<T::NextType>(orig)
841
- }
842
- }
843
- }
844
- trait PrintablePanicType: Display {
845
- type NextType: PrintablePanicType;
846
- }
847
- impl PrintablePanicType for &str {
848
- type NextType = String;
849
- }
850
- impl PrintablePanicType for String {
851
- type NextType = EndPrintingAttempts;
852
- }
853
- struct EndPrintingAttempts {}
854
- impl Display for EndPrintingAttempts {
855
- fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
856
- write!(f, "Will never be printed")
857
- }
858
- }
859
- impl PrintablePanicType for EndPrintingAttempts {
860
- type NextType = EndPrintingAttempts;
861
- }