temporalio 0.1.1 → 0.3.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 (628) hide show
  1. checksums.yaml +4 -4
  2. data/.yardopts +2 -0
  3. data/Cargo.lock +4324 -0
  4. data/Cargo.toml +25 -0
  5. data/Gemfile +20 -0
  6. data/LICENSE +16 -15
  7. data/README.md +985 -183
  8. data/Rakefile +101 -0
  9. data/ext/Cargo.toml +26 -0
  10. data/lib/temporalio/activity/complete_async_error.rb +11 -0
  11. data/lib/temporalio/activity/context.rb +86 -78
  12. data/lib/temporalio/activity/definition.rb +175 -0
  13. data/lib/temporalio/activity/info.rb +44 -47
  14. data/lib/temporalio/activity.rb +8 -81
  15. data/lib/temporalio/api/activity/v1/message.rb +25 -0
  16. data/lib/temporalio/api/batch/v1/message.rb +31 -0
  17. data/lib/temporalio/api/cloud/account/v1/message.rb +28 -0
  18. data/lib/temporalio/api/cloud/cloudservice/v1/request_response.rb +126 -0
  19. data/lib/temporalio/api/cloud/cloudservice/v1/service.rb +25 -0
  20. data/lib/temporalio/api/cloud/cloudservice.rb +3 -0
  21. data/lib/temporalio/api/cloud/identity/v1/message.rb +41 -0
  22. data/lib/temporalio/api/cloud/namespace/v1/message.rb +42 -0
  23. data/lib/temporalio/api/cloud/nexus/v1/message.rb +31 -0
  24. data/lib/temporalio/api/cloud/operation/v1/message.rb +28 -0
  25. data/lib/temporalio/api/cloud/region/v1/message.rb +24 -0
  26. data/lib/temporalio/api/cloud/resource/v1/message.rb +23 -0
  27. data/lib/temporalio/api/cloud/sink/v1/message.rb +24 -0
  28. data/lib/temporalio/api/cloud/usage/v1/message.rb +31 -0
  29. data/lib/temporalio/api/command/v1/message.rb +46 -0
  30. data/lib/temporalio/api/common/v1/grpc_status.rb +23 -0
  31. data/lib/temporalio/api/common/v1/message.rb +47 -0
  32. data/lib/temporalio/api/enums/v1/batch_operation.rb +22 -0
  33. data/lib/temporalio/api/enums/v1/command_type.rb +21 -0
  34. data/lib/temporalio/api/enums/v1/common.rb +26 -0
  35. data/lib/temporalio/api/enums/v1/event_type.rb +21 -0
  36. data/lib/temporalio/api/enums/v1/failed_cause.rb +26 -0
  37. data/lib/temporalio/api/enums/v1/namespace.rb +23 -0
  38. data/lib/temporalio/api/enums/v1/query.rb +22 -0
  39. data/lib/temporalio/api/enums/v1/reset.rb +23 -0
  40. data/lib/temporalio/api/enums/v1/schedule.rb +21 -0
  41. data/lib/temporalio/api/enums/v1/task_queue.rb +25 -0
  42. data/lib/temporalio/api/enums/v1/update.rb +22 -0
  43. data/lib/temporalio/api/enums/v1/workflow.rb +30 -0
  44. data/lib/temporalio/api/errordetails/v1/message.rb +42 -0
  45. data/lib/temporalio/api/export/v1/message.rb +24 -0
  46. data/lib/temporalio/api/failure/v1/message.rb +35 -0
  47. data/lib/temporalio/api/filter/v1/message.rb +27 -0
  48. data/lib/temporalio/api/history/v1/message.rb +90 -0
  49. data/lib/temporalio/api/namespace/v1/message.rb +31 -0
  50. data/lib/temporalio/api/nexus/v1/message.rb +40 -0
  51. data/lib/temporalio/api/operatorservice/v1/request_response.rb +49 -0
  52. data/lib/temporalio/api/operatorservice/v1/service.rb +23 -0
  53. data/lib/temporalio/api/operatorservice.rb +3 -0
  54. data/lib/temporalio/api/payload_visitor.rb +1513 -0
  55. data/lib/temporalio/api/protocol/v1/message.rb +23 -0
  56. data/lib/temporalio/api/query/v1/message.rb +27 -0
  57. data/lib/temporalio/api/replication/v1/message.rb +26 -0
  58. data/lib/temporalio/api/schedule/v1/message.rb +43 -0
  59. data/lib/temporalio/api/sdk/v1/enhanced_stack_trace.rb +25 -0
  60. data/lib/temporalio/api/sdk/v1/task_complete_metadata.rb +21 -0
  61. data/lib/temporalio/api/sdk/v1/user_metadata.rb +23 -0
  62. data/lib/temporalio/api/sdk/v1/workflow_metadata.rb +23 -0
  63. data/lib/temporalio/api/taskqueue/v1/message.rb +45 -0
  64. data/lib/{gen/temporal/api/testservice/v1/request_response_pb.rb → temporalio/api/testservice/v1/request_response.rb} +6 -24
  65. data/lib/temporalio/api/testservice/v1/service.rb +23 -0
  66. data/lib/temporalio/api/update/v1/message.rb +33 -0
  67. data/lib/temporalio/api/version/v1/message.rb +26 -0
  68. data/lib/temporalio/api/workflow/v1/message.rb +43 -0
  69. data/lib/temporalio/api/workflowservice/v1/request_response.rb +204 -0
  70. data/lib/temporalio/api/workflowservice/v1/service.rb +23 -0
  71. data/lib/temporalio/api/workflowservice.rb +3 -0
  72. data/lib/temporalio/api.rb +14 -0
  73. data/lib/temporalio/cancellation.rb +170 -0
  74. data/lib/temporalio/client/activity_id_reference.rb +32 -0
  75. data/lib/temporalio/client/async_activity_handle.rb +85 -0
  76. data/lib/temporalio/client/connection/cloud_service.rb +726 -0
  77. data/lib/temporalio/client/connection/operator_service.rb +201 -0
  78. data/lib/temporalio/client/connection/service.rb +42 -0
  79. data/lib/temporalio/client/connection/test_service.rb +111 -0
  80. data/lib/temporalio/client/connection/workflow_service.rb +1041 -0
  81. data/lib/temporalio/client/connection.rb +316 -0
  82. data/lib/temporalio/client/interceptor.rb +416 -0
  83. data/lib/temporalio/client/schedule.rb +967 -0
  84. data/lib/temporalio/client/schedule_handle.rb +126 -0
  85. data/lib/temporalio/client/workflow_execution.rb +100 -0
  86. data/lib/temporalio/client/workflow_execution_count.rb +36 -0
  87. data/lib/temporalio/client/workflow_execution_status.rb +18 -0
  88. data/lib/temporalio/client/workflow_handle.rb +326 -180
  89. data/lib/temporalio/client/workflow_query_reject_condition.rb +14 -0
  90. data/lib/temporalio/client/workflow_update_handle.rb +65 -0
  91. data/lib/temporalio/client/workflow_update_wait_stage.rb +17 -0
  92. data/lib/temporalio/client.rb +447 -94
  93. data/lib/temporalio/common_enums.rb +41 -0
  94. data/lib/temporalio/converters/data_converter.rb +99 -0
  95. data/lib/temporalio/converters/failure_converter.rb +202 -0
  96. data/lib/temporalio/converters/payload_codec.rb +26 -0
  97. data/lib/temporalio/converters/payload_converter/binary_null.rb +34 -0
  98. data/lib/temporalio/converters/payload_converter/binary_plain.rb +35 -0
  99. data/lib/temporalio/converters/payload_converter/binary_protobuf.rb +42 -0
  100. data/lib/temporalio/converters/payload_converter/composite.rb +66 -0
  101. data/lib/temporalio/converters/payload_converter/encoding.rb +35 -0
  102. data/lib/temporalio/converters/payload_converter/json_plain.rb +44 -0
  103. data/lib/temporalio/converters/payload_converter/json_protobuf.rb +41 -0
  104. data/lib/temporalio/converters/payload_converter.rb +71 -0
  105. data/lib/temporalio/converters/raw_value.rb +20 -0
  106. data/lib/temporalio/converters.rb +9 -0
  107. data/lib/temporalio/error/failure.rb +119 -94
  108. data/lib/temporalio/error.rb +155 -0
  109. data/lib/temporalio/internal/bridge/api/activity_result/activity_result.rb +34 -0
  110. data/lib/temporalio/internal/bridge/api/activity_task/activity_task.rb +31 -0
  111. data/lib/temporalio/internal/bridge/api/child_workflow/child_workflow.rb +33 -0
  112. data/lib/temporalio/internal/bridge/api/common/common.rb +26 -0
  113. data/lib/temporalio/internal/bridge/api/core_interface.rb +40 -0
  114. data/lib/temporalio/internal/bridge/api/external_data/external_data.rb +27 -0
  115. data/lib/temporalio/internal/bridge/api/nexus/nexus.rb +33 -0
  116. data/lib/temporalio/internal/bridge/api/workflow_activation/workflow_activation.rb +56 -0
  117. data/lib/temporalio/internal/bridge/api/workflow_commands/workflow_commands.rb +57 -0
  118. data/lib/temporalio/internal/bridge/api/workflow_completion/workflow_completion.rb +30 -0
  119. data/lib/temporalio/internal/bridge/api.rb +3 -0
  120. data/lib/temporalio/internal/bridge/client.rb +95 -0
  121. data/lib/temporalio/internal/bridge/runtime.rb +53 -0
  122. data/lib/temporalio/internal/bridge/testing.rb +66 -0
  123. data/lib/temporalio/internal/bridge/worker.rb +85 -0
  124. data/lib/temporalio/internal/bridge.rb +36 -0
  125. data/lib/temporalio/internal/client/implementation.rb +700 -0
  126. data/lib/temporalio/internal/metric.rb +122 -0
  127. data/lib/temporalio/internal/proto_utils.rb +133 -0
  128. data/lib/temporalio/internal/worker/activity_worker.rb +373 -0
  129. data/lib/temporalio/internal/worker/multi_runner.rb +213 -0
  130. data/lib/temporalio/internal/worker/workflow_instance/child_workflow_handle.rb +54 -0
  131. data/lib/temporalio/internal/worker/workflow_instance/context.rb +329 -0
  132. data/lib/temporalio/internal/worker/workflow_instance/details.rb +44 -0
  133. data/lib/temporalio/internal/worker/workflow_instance/external_workflow_handle.rb +32 -0
  134. data/lib/temporalio/internal/worker/workflow_instance/externally_immutable_hash.rb +22 -0
  135. data/lib/temporalio/internal/worker/workflow_instance/handler_execution.rb +25 -0
  136. data/lib/temporalio/internal/worker/workflow_instance/handler_hash.rb +41 -0
  137. data/lib/temporalio/internal/worker/workflow_instance/illegal_call_tracer.rb +97 -0
  138. data/lib/temporalio/internal/worker/workflow_instance/inbound_implementation.rb +62 -0
  139. data/lib/temporalio/internal/worker/workflow_instance/outbound_implementation.rb +415 -0
  140. data/lib/temporalio/internal/worker/workflow_instance/replay_safe_logger.rb +37 -0
  141. data/lib/temporalio/internal/worker/workflow_instance/replay_safe_metric.rb +40 -0
  142. data/lib/temporalio/internal/worker/workflow_instance/scheduler.rb +163 -0
  143. data/lib/temporalio/internal/worker/workflow_instance.rb +730 -0
  144. data/lib/temporalio/internal/worker/workflow_worker.rb +196 -0
  145. data/lib/temporalio/internal.rb +7 -0
  146. data/lib/temporalio/metric.rb +109 -0
  147. data/lib/temporalio/retry_policy.rb +55 -73
  148. data/lib/temporalio/runtime.rb +302 -13
  149. data/lib/temporalio/scoped_logger.rb +96 -0
  150. data/lib/temporalio/search_attributes.rb +343 -0
  151. data/lib/temporalio/testing/activity_environment.rb +132 -0
  152. data/lib/temporalio/testing/workflow_environment.rb +345 -74
  153. data/lib/temporalio/testing.rb +4 -169
  154. data/lib/temporalio/version.rb +3 -1
  155. data/lib/temporalio/worker/activity_executor/fiber.rb +49 -0
  156. data/lib/temporalio/worker/activity_executor/thread_pool.rb +46 -0
  157. data/lib/temporalio/worker/activity_executor.rb +55 -0
  158. data/lib/temporalio/worker/interceptor.rb +362 -0
  159. data/lib/temporalio/worker/thread_pool.rb +237 -0
  160. data/lib/temporalio/worker/tuner.rb +151 -0
  161. data/lib/temporalio/worker/workflow_executor/thread_pool.rb +230 -0
  162. data/lib/temporalio/worker/workflow_executor.rb +26 -0
  163. data/lib/temporalio/worker.rb +554 -161
  164. data/lib/temporalio/workflow/activity_cancellation_type.rb +20 -0
  165. data/lib/temporalio/workflow/child_workflow_cancellation_type.rb +21 -0
  166. data/lib/temporalio/workflow/child_workflow_handle.rb +43 -0
  167. data/lib/temporalio/workflow/definition.rb +566 -0
  168. data/lib/temporalio/workflow/external_workflow_handle.rb +41 -0
  169. data/lib/temporalio/workflow/future.rb +117 -104
  170. data/lib/temporalio/workflow/handler_unfinished_policy.rb +13 -0
  171. data/lib/temporalio/workflow/info.rb +63 -57
  172. data/lib/temporalio/workflow/parent_close_policy.rb +19 -0
  173. data/lib/temporalio/workflow/update_info.rb +20 -0
  174. data/lib/temporalio/workflow.rb +523 -0
  175. data/lib/temporalio/workflow_history.rb +22 -0
  176. data/lib/temporalio.rb +6 -7
  177. data/temporalio.gemspec +20 -39
  178. metadata +171 -710
  179. data/bridge/Cargo.lock +0 -2997
  180. data/bridge/Cargo.toml +0 -29
  181. data/bridge/sdk-core/ARCHITECTURE.md +0 -76
  182. data/bridge/sdk-core/Cargo.toml +0 -2
  183. data/bridge/sdk-core/LICENSE.txt +0 -23
  184. data/bridge/sdk-core/README.md +0 -117
  185. data/bridge/sdk-core/arch_docs/diagrams/README.md +0 -10
  186. data/bridge/sdk-core/arch_docs/diagrams/sticky_queues.puml +0 -40
  187. data/bridge/sdk-core/arch_docs/diagrams/workflow_internals.svg +0 -1
  188. data/bridge/sdk-core/arch_docs/sticky_queues.md +0 -51
  189. data/bridge/sdk-core/client/Cargo.toml +0 -40
  190. data/bridge/sdk-core/client/LICENSE.txt +0 -23
  191. data/bridge/sdk-core/client/src/lib.rs +0 -1462
  192. data/bridge/sdk-core/client/src/metrics.rs +0 -174
  193. data/bridge/sdk-core/client/src/raw.rs +0 -932
  194. data/bridge/sdk-core/client/src/retry.rs +0 -763
  195. data/bridge/sdk-core/client/src/workflow_handle/mod.rs +0 -185
  196. data/bridge/sdk-core/core/Cargo.toml +0 -129
  197. data/bridge/sdk-core/core/LICENSE.txt +0 -23
  198. data/bridge/sdk-core/core/benches/workflow_replay.rs +0 -76
  199. data/bridge/sdk-core/core/src/abstractions.rs +0 -355
  200. data/bridge/sdk-core/core/src/core_tests/activity_tasks.rs +0 -1049
  201. data/bridge/sdk-core/core/src/core_tests/child_workflows.rs +0 -221
  202. data/bridge/sdk-core/core/src/core_tests/determinism.rs +0 -270
  203. data/bridge/sdk-core/core/src/core_tests/local_activities.rs +0 -1046
  204. data/bridge/sdk-core/core/src/core_tests/mod.rs +0 -100
  205. data/bridge/sdk-core/core/src/core_tests/queries.rs +0 -893
  206. data/bridge/sdk-core/core/src/core_tests/replay_flag.rs +0 -65
  207. data/bridge/sdk-core/core/src/core_tests/workers.rs +0 -257
  208. data/bridge/sdk-core/core/src/core_tests/workflow_cancels.rs +0 -124
  209. data/bridge/sdk-core/core/src/core_tests/workflow_tasks.rs +0 -2433
  210. data/bridge/sdk-core/core/src/ephemeral_server/mod.rs +0 -609
  211. data/bridge/sdk-core/core/src/internal_flags.rs +0 -136
  212. data/bridge/sdk-core/core/src/lib.rs +0 -289
  213. data/bridge/sdk-core/core/src/pollers/mod.rs +0 -54
  214. data/bridge/sdk-core/core/src/pollers/poll_buffer.rs +0 -297
  215. data/bridge/sdk-core/core/src/protosext/mod.rs +0 -428
  216. data/bridge/sdk-core/core/src/replay/mod.rs +0 -215
  217. data/bridge/sdk-core/core/src/retry_logic.rs +0 -202
  218. data/bridge/sdk-core/core/src/telemetry/log_export.rs +0 -190
  219. data/bridge/sdk-core/core/src/telemetry/metrics.rs +0 -462
  220. data/bridge/sdk-core/core/src/telemetry/mod.rs +0 -423
  221. data/bridge/sdk-core/core/src/telemetry/prometheus_server.rs +0 -83
  222. data/bridge/sdk-core/core/src/test_help/mod.rs +0 -939
  223. data/bridge/sdk-core/core/src/worker/activities/activity_heartbeat_manager.rs +0 -536
  224. data/bridge/sdk-core/core/src/worker/activities/activity_task_poller_stream.rs +0 -89
  225. data/bridge/sdk-core/core/src/worker/activities/local_activities.rs +0 -1278
  226. data/bridge/sdk-core/core/src/worker/activities.rs +0 -557
  227. data/bridge/sdk-core/core/src/worker/client/mocks.rs +0 -107
  228. data/bridge/sdk-core/core/src/worker/client.rs +0 -389
  229. data/bridge/sdk-core/core/src/worker/mod.rs +0 -677
  230. data/bridge/sdk-core/core/src/worker/workflow/bridge.rs +0 -35
  231. data/bridge/sdk-core/core/src/worker/workflow/driven_workflow.rs +0 -99
  232. data/bridge/sdk-core/core/src/worker/workflow/history_update.rs +0 -1111
  233. data/bridge/sdk-core/core/src/worker/workflow/machines/activity_state_machine.rs +0 -964
  234. data/bridge/sdk-core/core/src/worker/workflow/machines/cancel_external_state_machine.rs +0 -294
  235. data/bridge/sdk-core/core/src/worker/workflow/machines/cancel_workflow_state_machine.rs +0 -168
  236. data/bridge/sdk-core/core/src/worker/workflow/machines/child_workflow_state_machine.rs +0 -918
  237. data/bridge/sdk-core/core/src/worker/workflow/machines/complete_workflow_state_machine.rs +0 -137
  238. data/bridge/sdk-core/core/src/worker/workflow/machines/continue_as_new_workflow_state_machine.rs +0 -158
  239. data/bridge/sdk-core/core/src/worker/workflow/machines/fail_workflow_state_machine.rs +0 -130
  240. data/bridge/sdk-core/core/src/worker/workflow/machines/local_activity_state_machine.rs +0 -1525
  241. data/bridge/sdk-core/core/src/worker/workflow/machines/mod.rs +0 -324
  242. data/bridge/sdk-core/core/src/worker/workflow/machines/modify_workflow_properties_state_machine.rs +0 -179
  243. data/bridge/sdk-core/core/src/worker/workflow/machines/patch_state_machine.rs +0 -659
  244. data/bridge/sdk-core/core/src/worker/workflow/machines/signal_external_state_machine.rs +0 -439
  245. data/bridge/sdk-core/core/src/worker/workflow/machines/timer_state_machine.rs +0 -435
  246. data/bridge/sdk-core/core/src/worker/workflow/machines/transition_coverage.rs +0 -175
  247. data/bridge/sdk-core/core/src/worker/workflow/machines/upsert_search_attributes_state_machine.rs +0 -249
  248. data/bridge/sdk-core/core/src/worker/workflow/machines/workflow_machines/local_acts.rs +0 -85
  249. data/bridge/sdk-core/core/src/worker/workflow/machines/workflow_machines.rs +0 -1280
  250. data/bridge/sdk-core/core/src/worker/workflow/machines/workflow_task_state_machine.rs +0 -269
  251. data/bridge/sdk-core/core/src/worker/workflow/managed_run/managed_wf_test.rs +0 -213
  252. data/bridge/sdk-core/core/src/worker/workflow/managed_run.rs +0 -1305
  253. data/bridge/sdk-core/core/src/worker/workflow/mod.rs +0 -1276
  254. data/bridge/sdk-core/core/src/worker/workflow/run_cache.rs +0 -128
  255. data/bridge/sdk-core/core/src/worker/workflow/wft_extraction.rs +0 -125
  256. data/bridge/sdk-core/core/src/worker/workflow/wft_poller.rs +0 -85
  257. data/bridge/sdk-core/core/src/worker/workflow/workflow_stream/saved_wf_inputs.rs +0 -117
  258. data/bridge/sdk-core/core/src/worker/workflow/workflow_stream/tonic_status_serde.rs +0 -24
  259. data/bridge/sdk-core/core/src/worker/workflow/workflow_stream.rs +0 -715
  260. data/bridge/sdk-core/core-api/Cargo.toml +0 -33
  261. data/bridge/sdk-core/core-api/LICENSE.txt +0 -23
  262. data/bridge/sdk-core/core-api/src/errors.rs +0 -62
  263. data/bridge/sdk-core/core-api/src/lib.rs +0 -113
  264. data/bridge/sdk-core/core-api/src/telemetry.rs +0 -141
  265. data/bridge/sdk-core/core-api/src/worker.rs +0 -161
  266. data/bridge/sdk-core/etc/deps.svg +0 -162
  267. data/bridge/sdk-core/etc/dynamic-config.yaml +0 -2
  268. data/bridge/sdk-core/etc/otel-collector-config.yaml +0 -36
  269. data/bridge/sdk-core/etc/prometheus.yaml +0 -6
  270. data/bridge/sdk-core/etc/regen-depgraph.sh +0 -5
  271. data/bridge/sdk-core/fsm/Cargo.toml +0 -18
  272. data/bridge/sdk-core/fsm/LICENSE.txt +0 -23
  273. data/bridge/sdk-core/fsm/README.md +0 -3
  274. data/bridge/sdk-core/fsm/rustfsm_procmacro/Cargo.toml +0 -27
  275. data/bridge/sdk-core/fsm/rustfsm_procmacro/LICENSE.txt +0 -23
  276. data/bridge/sdk-core/fsm/rustfsm_procmacro/src/lib.rs +0 -650
  277. data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/progress.rs +0 -8
  278. data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/dupe_transitions_fail.rs +0 -18
  279. data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/dupe_transitions_fail.stderr +0 -12
  280. data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/dynamic_dest_pass.rs +0 -41
  281. data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/forgot_name_fail.rs +0 -14
  282. data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/forgot_name_fail.stderr +0 -11
  283. data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/handler_arg_pass.rs +0 -32
  284. data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/handler_pass.rs +0 -31
  285. data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/medium_complex_pass.rs +0 -46
  286. data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/no_handle_conversions_require_into_fail.rs +0 -29
  287. data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/no_handle_conversions_require_into_fail.stderr +0 -12
  288. data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/simple_pass.rs +0 -32
  289. data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/struct_event_variant_fail.rs +0 -18
  290. data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/struct_event_variant_fail.stderr +0 -5
  291. data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/tuple_more_item_event_variant_fail.rs +0 -11
  292. data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/tuple_more_item_event_variant_fail.stderr +0 -5
  293. data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/tuple_zero_item_event_variant_fail.rs +0 -11
  294. data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/tuple_zero_item_event_variant_fail.stderr +0 -5
  295. data/bridge/sdk-core/fsm/rustfsm_trait/Cargo.toml +0 -14
  296. data/bridge/sdk-core/fsm/rustfsm_trait/LICENSE.txt +0 -23
  297. data/bridge/sdk-core/fsm/rustfsm_trait/src/lib.rs +0 -254
  298. data/bridge/sdk-core/fsm/src/lib.rs +0 -2
  299. data/bridge/sdk-core/histories/evict_while_la_running_no_interference-16_history.bin +0 -0
  300. data/bridge/sdk-core/histories/evict_while_la_running_no_interference-23_history.bin +0 -0
  301. data/bridge/sdk-core/histories/evict_while_la_running_no_interference-85_history.bin +0 -0
  302. data/bridge/sdk-core/histories/fail_wf_task.bin +0 -0
  303. data/bridge/sdk-core/histories/timer_workflow_history.bin +0 -0
  304. data/bridge/sdk-core/integ-with-otel.sh +0 -7
  305. data/bridge/sdk-core/protos/api_upstream/README.md +0 -9
  306. data/bridge/sdk-core/protos/api_upstream/api-linter.yaml +0 -40
  307. data/bridge/sdk-core/protos/api_upstream/buf.yaml +0 -9
  308. data/bridge/sdk-core/protos/api_upstream/build/go.mod +0 -7
  309. data/bridge/sdk-core/protos/api_upstream/build/go.sum +0 -5
  310. data/bridge/sdk-core/protos/api_upstream/build/tools.go +0 -29
  311. data/bridge/sdk-core/protos/api_upstream/dependencies/gogoproto/gogo.proto +0 -141
  312. data/bridge/sdk-core/protos/api_upstream/go.mod +0 -6
  313. data/bridge/sdk-core/protos/api_upstream/temporal/api/batch/v1/message.proto +0 -89
  314. data/bridge/sdk-core/protos/api_upstream/temporal/api/command/v1/message.proto +0 -248
  315. data/bridge/sdk-core/protos/api_upstream/temporal/api/common/v1/message.proto +0 -123
  316. data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/batch_operation.proto +0 -47
  317. data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/command_type.proto +0 -52
  318. data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/common.proto +0 -56
  319. data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/event_type.proto +0 -170
  320. data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/failed_cause.proto +0 -123
  321. data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/namespace.proto +0 -51
  322. data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/query.proto +0 -50
  323. data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/reset.proto +0 -41
  324. data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/schedule.proto +0 -60
  325. data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/task_queue.proto +0 -59
  326. data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/update.proto +0 -56
  327. data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/workflow.proto +0 -122
  328. data/bridge/sdk-core/protos/api_upstream/temporal/api/errordetails/v1/message.proto +0 -108
  329. data/bridge/sdk-core/protos/api_upstream/temporal/api/failure/v1/message.proto +0 -114
  330. data/bridge/sdk-core/protos/api_upstream/temporal/api/filter/v1/message.proto +0 -56
  331. data/bridge/sdk-core/protos/api_upstream/temporal/api/history/v1/message.proto +0 -787
  332. data/bridge/sdk-core/protos/api_upstream/temporal/api/namespace/v1/message.proto +0 -99
  333. data/bridge/sdk-core/protos/api_upstream/temporal/api/operatorservice/v1/request_response.proto +0 -124
  334. data/bridge/sdk-core/protos/api_upstream/temporal/api/operatorservice/v1/service.proto +0 -80
  335. data/bridge/sdk-core/protos/api_upstream/temporal/api/protocol/v1/message.proto +0 -57
  336. data/bridge/sdk-core/protos/api_upstream/temporal/api/query/v1/message.proto +0 -61
  337. data/bridge/sdk-core/protos/api_upstream/temporal/api/replication/v1/message.proto +0 -55
  338. data/bridge/sdk-core/protos/api_upstream/temporal/api/schedule/v1/message.proto +0 -379
  339. data/bridge/sdk-core/protos/api_upstream/temporal/api/sdk/v1/task_complete_metadata.proto +0 -63
  340. data/bridge/sdk-core/protos/api_upstream/temporal/api/taskqueue/v1/message.proto +0 -108
  341. data/bridge/sdk-core/protos/api_upstream/temporal/api/update/v1/message.proto +0 -111
  342. data/bridge/sdk-core/protos/api_upstream/temporal/api/version/v1/message.proto +0 -59
  343. data/bridge/sdk-core/protos/api_upstream/temporal/api/workflow/v1/message.proto +0 -146
  344. data/bridge/sdk-core/protos/api_upstream/temporal/api/workflowservice/v1/request_response.proto +0 -1199
  345. data/bridge/sdk-core/protos/api_upstream/temporal/api/workflowservice/v1/service.proto +0 -415
  346. data/bridge/sdk-core/protos/grpc/health/v1/health.proto +0 -63
  347. data/bridge/sdk-core/protos/local/temporal/sdk/core/activity_result/activity_result.proto +0 -79
  348. data/bridge/sdk-core/protos/local/temporal/sdk/core/activity_task/activity_task.proto +0 -80
  349. data/bridge/sdk-core/protos/local/temporal/sdk/core/child_workflow/child_workflow.proto +0 -78
  350. data/bridge/sdk-core/protos/local/temporal/sdk/core/common/common.proto +0 -16
  351. data/bridge/sdk-core/protos/local/temporal/sdk/core/core_interface.proto +0 -31
  352. data/bridge/sdk-core/protos/local/temporal/sdk/core/external_data/external_data.proto +0 -31
  353. data/bridge/sdk-core/protos/local/temporal/sdk/core/workflow_activation/workflow_activation.proto +0 -270
  354. data/bridge/sdk-core/protos/local/temporal/sdk/core/workflow_commands/workflow_commands.proto +0 -305
  355. data/bridge/sdk-core/protos/local/temporal/sdk/core/workflow_completion/workflow_completion.proto +0 -35
  356. data/bridge/sdk-core/protos/testsrv_upstream/api-linter.yaml +0 -38
  357. data/bridge/sdk-core/protos/testsrv_upstream/buf.yaml +0 -13
  358. data/bridge/sdk-core/protos/testsrv_upstream/dependencies/gogoproto/gogo.proto +0 -141
  359. data/bridge/sdk-core/protos/testsrv_upstream/temporal/api/testservice/v1/request_response.proto +0 -63
  360. data/bridge/sdk-core/protos/testsrv_upstream/temporal/api/testservice/v1/service.proto +0 -90
  361. data/bridge/sdk-core/rustfmt.toml +0 -1
  362. data/bridge/sdk-core/sdk/Cargo.toml +0 -48
  363. data/bridge/sdk-core/sdk/LICENSE.txt +0 -23
  364. data/bridge/sdk-core/sdk/src/activity_context.rs +0 -230
  365. data/bridge/sdk-core/sdk/src/app_data.rs +0 -37
  366. data/bridge/sdk-core/sdk/src/interceptors.rs +0 -50
  367. data/bridge/sdk-core/sdk/src/lib.rs +0 -861
  368. data/bridge/sdk-core/sdk/src/payload_converter.rs +0 -11
  369. data/bridge/sdk-core/sdk/src/workflow_context/options.rs +0 -295
  370. data/bridge/sdk-core/sdk/src/workflow_context.rs +0 -694
  371. data/bridge/sdk-core/sdk/src/workflow_future.rs +0 -500
  372. data/bridge/sdk-core/sdk-core-protos/Cargo.toml +0 -33
  373. data/bridge/sdk-core/sdk-core-protos/LICENSE.txt +0 -23
  374. data/bridge/sdk-core/sdk-core-protos/build.rs +0 -142
  375. data/bridge/sdk-core/sdk-core-protos/src/constants.rs +0 -7
  376. data/bridge/sdk-core/sdk-core-protos/src/history_builder.rs +0 -557
  377. data/bridge/sdk-core/sdk-core-protos/src/history_info.rs +0 -234
  378. data/bridge/sdk-core/sdk-core-protos/src/lib.rs +0 -2088
  379. data/bridge/sdk-core/sdk-core-protos/src/task_token.rs +0 -48
  380. data/bridge/sdk-core/sdk-core-protos/src/utilities.rs +0 -14
  381. data/bridge/sdk-core/test-utils/Cargo.toml +0 -38
  382. data/bridge/sdk-core/test-utils/src/canned_histories.rs +0 -1389
  383. data/bridge/sdk-core/test-utils/src/histfetch.rs +0 -28
  384. data/bridge/sdk-core/test-utils/src/lib.rs +0 -709
  385. data/bridge/sdk-core/test-utils/src/wf_input_saver.rs +0 -50
  386. data/bridge/sdk-core/test-utils/src/workflows.rs +0 -29
  387. data/bridge/sdk-core/tests/fuzzy_workflow.rs +0 -130
  388. data/bridge/sdk-core/tests/heavy_tests.rs +0 -265
  389. data/bridge/sdk-core/tests/integ_tests/client_tests.rs +0 -36
  390. data/bridge/sdk-core/tests/integ_tests/ephemeral_server_tests.rs +0 -150
  391. data/bridge/sdk-core/tests/integ_tests/heartbeat_tests.rs +0 -223
  392. data/bridge/sdk-core/tests/integ_tests/metrics_tests.rs +0 -239
  393. data/bridge/sdk-core/tests/integ_tests/polling_tests.rs +0 -90
  394. data/bridge/sdk-core/tests/integ_tests/queries_tests.rs +0 -314
  395. data/bridge/sdk-core/tests/integ_tests/visibility_tests.rs +0 -151
  396. data/bridge/sdk-core/tests/integ_tests/workflow_tests/activities.rs +0 -902
  397. data/bridge/sdk-core/tests/integ_tests/workflow_tests/appdata_propagation.rs +0 -61
  398. data/bridge/sdk-core/tests/integ_tests/workflow_tests/cancel_external.rs +0 -60
  399. data/bridge/sdk-core/tests/integ_tests/workflow_tests/cancel_wf.rs +0 -51
  400. data/bridge/sdk-core/tests/integ_tests/workflow_tests/child_workflows.rs +0 -51
  401. data/bridge/sdk-core/tests/integ_tests/workflow_tests/continue_as_new.rs +0 -64
  402. data/bridge/sdk-core/tests/integ_tests/workflow_tests/determinism.rs +0 -47
  403. data/bridge/sdk-core/tests/integ_tests/workflow_tests/local_activities.rs +0 -669
  404. data/bridge/sdk-core/tests/integ_tests/workflow_tests/modify_wf_properties.rs +0 -54
  405. data/bridge/sdk-core/tests/integ_tests/workflow_tests/patches.rs +0 -92
  406. data/bridge/sdk-core/tests/integ_tests/workflow_tests/replay.rs +0 -228
  407. data/bridge/sdk-core/tests/integ_tests/workflow_tests/resets.rs +0 -94
  408. data/bridge/sdk-core/tests/integ_tests/workflow_tests/signals.rs +0 -171
  409. data/bridge/sdk-core/tests/integ_tests/workflow_tests/stickyness.rs +0 -85
  410. data/bridge/sdk-core/tests/integ_tests/workflow_tests/timers.rs +0 -120
  411. data/bridge/sdk-core/tests/integ_tests/workflow_tests/upsert_search_attrs.rs +0 -77
  412. data/bridge/sdk-core/tests/integ_tests/workflow_tests.rs +0 -596
  413. data/bridge/sdk-core/tests/main.rs +0 -103
  414. data/bridge/sdk-core/tests/runner.rs +0 -132
  415. data/bridge/sdk-core/tests/wf_input_replay.rs +0 -32
  416. data/bridge/src/connection.rs +0 -202
  417. data/bridge/src/lib.rs +0 -494
  418. data/bridge/src/runtime.rs +0 -54
  419. data/bridge/src/test_server.rs +0 -153
  420. data/bridge/src/worker.rs +0 -197
  421. data/ext/Rakefile +0 -9
  422. data/lib/gen/dependencies/gogoproto/gogo_pb.rb +0 -14
  423. data/lib/gen/temporal/api/batch/v1/message_pb.rb +0 -50
  424. data/lib/gen/temporal/api/command/v1/message_pb.rb +0 -160
  425. data/lib/gen/temporal/api/common/v1/message_pb.rb +0 -73
  426. data/lib/gen/temporal/api/enums/v1/batch_operation_pb.rb +0 -33
  427. data/lib/gen/temporal/api/enums/v1/command_type_pb.rb +0 -37
  428. data/lib/gen/temporal/api/enums/v1/common_pb.rb +0 -42
  429. data/lib/gen/temporal/api/enums/v1/event_type_pb.rb +0 -68
  430. data/lib/gen/temporal/api/enums/v1/failed_cause_pb.rb +0 -79
  431. data/lib/gen/temporal/api/enums/v1/namespace_pb.rb +0 -37
  432. data/lib/gen/temporal/api/enums/v1/query_pb.rb +0 -31
  433. data/lib/gen/temporal/api/enums/v1/reset_pb.rb +0 -24
  434. data/lib/gen/temporal/api/enums/v1/schedule_pb.rb +0 -28
  435. data/lib/gen/temporal/api/enums/v1/task_queue_pb.rb +0 -30
  436. data/lib/gen/temporal/api/enums/v1/update_pb.rb +0 -25
  437. data/lib/gen/temporal/api/enums/v1/workflow_pb.rb +0 -89
  438. data/lib/gen/temporal/api/errordetails/v1/message_pb.rb +0 -84
  439. data/lib/gen/temporal/api/failure/v1/message_pb.rb +0 -83
  440. data/lib/gen/temporal/api/filter/v1/message_pb.rb +0 -40
  441. data/lib/gen/temporal/api/history/v1/message_pb.rb +0 -498
  442. data/lib/gen/temporal/api/namespace/v1/message_pb.rb +0 -64
  443. data/lib/gen/temporal/api/operatorservice/v1/request_response_pb.rb +0 -88
  444. data/lib/gen/temporal/api/operatorservice/v1/service_pb.rb +0 -20
  445. data/lib/gen/temporal/api/protocol/v1/message_pb.rb +0 -30
  446. data/lib/gen/temporal/api/query/v1/message_pb.rb +0 -38
  447. data/lib/gen/temporal/api/replication/v1/message_pb.rb +0 -37
  448. data/lib/gen/temporal/api/schedule/v1/message_pb.rb +0 -149
  449. data/lib/gen/temporal/api/sdk/v1/task_complete_metadata_pb.rb +0 -23
  450. data/lib/gen/temporal/api/taskqueue/v1/message_pb.rb +0 -73
  451. data/lib/gen/temporal/api/testservice/v1/service_pb.rb +0 -21
  452. data/lib/gen/temporal/api/update/v1/message_pb.rb +0 -72
  453. data/lib/gen/temporal/api/version/v1/message_pb.rb +0 -41
  454. data/lib/gen/temporal/api/workflow/v1/message_pb.rb +0 -111
  455. data/lib/gen/temporal/api/workflowservice/v1/request_response_pb.rb +0 -798
  456. data/lib/gen/temporal/api/workflowservice/v1/service_pb.rb +0 -20
  457. data/lib/gen/temporal/sdk/core/activity_result/activity_result_pb.rb +0 -62
  458. data/lib/gen/temporal/sdk/core/activity_task/activity_task_pb.rb +0 -61
  459. data/lib/gen/temporal/sdk/core/child_workflow/child_workflow_pb.rb +0 -61
  460. data/lib/gen/temporal/sdk/core/common/common_pb.rb +0 -26
  461. data/lib/gen/temporal/sdk/core/core_interface_pb.rb +0 -40
  462. data/lib/gen/temporal/sdk/core/external_data/external_data_pb.rb +0 -31
  463. data/lib/gen/temporal/sdk/core/workflow_activation/workflow_activation_pb.rb +0 -171
  464. data/lib/gen/temporal/sdk/core/workflow_commands/workflow_commands_pb.rb +0 -200
  465. data/lib/gen/temporal/sdk/core/workflow_completion/workflow_completion_pb.rb +0 -41
  466. data/lib/temporalio/bridge/connect_options.rb +0 -15
  467. data/lib/temporalio/bridge/error.rb +0 -8
  468. data/lib/temporalio/bridge/retry_config.rb +0 -24
  469. data/lib/temporalio/bridge/tls_options.rb +0 -19
  470. data/lib/temporalio/bridge.rb +0 -14
  471. data/lib/temporalio/client/implementation.rb +0 -340
  472. data/lib/temporalio/connection/retry_config.rb +0 -44
  473. data/lib/temporalio/connection/service.rb +0 -20
  474. data/lib/temporalio/connection/test_service.rb +0 -92
  475. data/lib/temporalio/connection/tls_options.rb +0 -51
  476. data/lib/temporalio/connection/workflow_service.rb +0 -731
  477. data/lib/temporalio/connection.rb +0 -86
  478. data/lib/temporalio/data_converter.rb +0 -191
  479. data/lib/temporalio/error/workflow_failure.rb +0 -19
  480. data/lib/temporalio/errors.rb +0 -40
  481. data/lib/temporalio/failure_converter/base.rb +0 -26
  482. data/lib/temporalio/failure_converter/basic.rb +0 -319
  483. data/lib/temporalio/failure_converter.rb +0 -7
  484. data/lib/temporalio/interceptor/activity_inbound.rb +0 -22
  485. data/lib/temporalio/interceptor/activity_outbound.rb +0 -24
  486. data/lib/temporalio/interceptor/chain.rb +0 -28
  487. data/lib/temporalio/interceptor/client.rb +0 -127
  488. data/lib/temporalio/interceptor.rb +0 -22
  489. data/lib/temporalio/payload_codec/base.rb +0 -32
  490. data/lib/temporalio/payload_converter/base.rb +0 -24
  491. data/lib/temporalio/payload_converter/bytes.rb +0 -27
  492. data/lib/temporalio/payload_converter/composite.rb +0 -49
  493. data/lib/temporalio/payload_converter/encoding_base.rb +0 -35
  494. data/lib/temporalio/payload_converter/json.rb +0 -26
  495. data/lib/temporalio/payload_converter/nil.rb +0 -26
  496. data/lib/temporalio/payload_converter.rb +0 -14
  497. data/lib/temporalio/retry_state.rb +0 -35
  498. data/lib/temporalio/testing/time_skipping_handle.rb +0 -32
  499. data/lib/temporalio/testing/time_skipping_interceptor.rb +0 -23
  500. data/lib/temporalio/timeout_type.rb +0 -29
  501. data/lib/temporalio/worker/activity_runner.rb +0 -114
  502. data/lib/temporalio/worker/activity_worker.rb +0 -164
  503. data/lib/temporalio/worker/reactor.rb +0 -46
  504. data/lib/temporalio/worker/runner.rb +0 -63
  505. data/lib/temporalio/worker/sync_worker.rb +0 -124
  506. data/lib/temporalio/worker/thread_pool_executor.rb +0 -51
  507. data/lib/temporalio/workflow/async.rb +0 -46
  508. data/lib/temporalio/workflow/execution_info.rb +0 -54
  509. data/lib/temporalio/workflow/execution_status.rb +0 -36
  510. data/lib/temporalio/workflow/id_reuse_policy.rb +0 -36
  511. data/lib/temporalio/workflow/query_reject_condition.rb +0 -33
  512. data/lib/thermite_patch.rb +0 -33
  513. data/sig/async.rbs +0 -17
  514. data/sig/protobuf.rbs +0 -16
  515. data/sig/protos/dependencies/gogoproto/gogo.rbs +0 -914
  516. data/sig/protos/google/protobuf/any.rbs +0 -157
  517. data/sig/protos/google/protobuf/descriptor.rbs +0 -2825
  518. data/sig/protos/google/protobuf/duration.rbs +0 -114
  519. data/sig/protos/google/protobuf/empty.rbs +0 -36
  520. data/sig/protos/google/protobuf/timestamp.rbs +0 -145
  521. data/sig/protos/google/protobuf/wrappers.rbs +0 -358
  522. data/sig/protos/temporal/api/batch/v1/message.rbs +0 -300
  523. data/sig/protos/temporal/api/command/v1/message.rbs +0 -1399
  524. data/sig/protos/temporal/api/common/v1/message.rbs +0 -528
  525. data/sig/protos/temporal/api/enums/v1/batch_operation.rbs +0 -79
  526. data/sig/protos/temporal/api/enums/v1/command_type.rbs +0 -68
  527. data/sig/protos/temporal/api/enums/v1/common.rbs +0 -118
  528. data/sig/protos/temporal/api/enums/v1/event_type.rbs +0 -264
  529. data/sig/protos/temporal/api/enums/v1/failed_cause.rbs +0 -277
  530. data/sig/protos/temporal/api/enums/v1/namespace.rbs +0 -108
  531. data/sig/protos/temporal/api/enums/v1/query.rbs +0 -81
  532. data/sig/protos/temporal/api/enums/v1/reset.rbs +0 -44
  533. data/sig/protos/temporal/api/enums/v1/schedule.rbs +0 -72
  534. data/sig/protos/temporal/api/enums/v1/task_queue.rbs +0 -92
  535. data/sig/protos/temporal/api/enums/v1/update.rbs +0 -64
  536. data/sig/protos/temporal/api/enums/v1/workflow.rbs +0 -371
  537. data/sig/protos/temporal/api/errordetails/v1/message.rbs +0 -551
  538. data/sig/protos/temporal/api/failure/v1/message.rbs +0 -581
  539. data/sig/protos/temporal/api/filter/v1/message.rbs +0 -171
  540. data/sig/protos/temporal/api/history/v1/message.rbs +0 -4609
  541. data/sig/protos/temporal/api/namespace/v1/message.rbs +0 -410
  542. data/sig/protos/temporal/api/operatorservice/v1/request_response.rbs +0 -643
  543. data/sig/protos/temporal/api/operatorservice/v1/service.rbs +0 -17
  544. data/sig/protos/temporal/api/protocol/v1/message.rbs +0 -84
  545. data/sig/protos/temporal/api/query/v1/message.rbs +0 -182
  546. data/sig/protos/temporal/api/replication/v1/message.rbs +0 -148
  547. data/sig/protos/temporal/api/schedule/v1/message.rbs +0 -1488
  548. data/sig/protos/temporal/api/sdk/v1/task_complete_metadata.rbs +0 -110
  549. data/sig/protos/temporal/api/taskqueue/v1/message.rbs +0 -486
  550. data/sig/protos/temporal/api/testservice/v1/request_response.rbs +0 -249
  551. data/sig/protos/temporal/api/testservice/v1/service.rbs +0 -15
  552. data/sig/protos/temporal/api/update/v1/message.rbs +0 -489
  553. data/sig/protos/temporal/api/version/v1/message.rbs +0 -184
  554. data/sig/protos/temporal/api/workflow/v1/message.rbs +0 -824
  555. data/sig/protos/temporal/api/workflowservice/v1/request_response.rbs +0 -7250
  556. data/sig/protos/temporal/api/workflowservice/v1/service.rbs +0 -22
  557. data/sig/protos/temporal/sdk/core/activity_result/activity_result.rbs +0 -380
  558. data/sig/protos/temporal/sdk/core/activity_task/activity_task.rbs +0 -386
  559. data/sig/protos/temporal/sdk/core/child_workflow/child_workflow.rbs +0 -323
  560. data/sig/protos/temporal/sdk/core/common/common.rbs +0 -62
  561. data/sig/protos/temporal/sdk/core/core_interface.rbs +0 -101
  562. data/sig/protos/temporal/sdk/core/external_data/external_data.rbs +0 -119
  563. data/sig/protos/temporal/sdk/core/workflow_activation/workflow_activation.rbs +0 -1473
  564. data/sig/protos/temporal/sdk/core/workflow_commands/workflow_commands.rbs +0 -1784
  565. data/sig/protos/temporal/sdk/core/workflow_completion/workflow_completion.rbs +0 -180
  566. data/sig/ruby.rbs +0 -12
  567. data/sig/temporalio/activity/context.rbs +0 -29
  568. data/sig/temporalio/activity/info.rbs +0 -43
  569. data/sig/temporalio/activity.rbs +0 -19
  570. data/sig/temporalio/bridge/connect_options.rbs +0 -19
  571. data/sig/temporalio/bridge/error.rbs +0 -8
  572. data/sig/temporalio/bridge/retry_config.rbs +0 -21
  573. data/sig/temporalio/bridge/tls_options.rbs +0 -17
  574. data/sig/temporalio/bridge.rbs +0 -71
  575. data/sig/temporalio/client/implementation.rbs +0 -38
  576. data/sig/temporalio/client/workflow_handle.rbs +0 -41
  577. data/sig/temporalio/client.rbs +0 -35
  578. data/sig/temporalio/connection/retry_config.rbs +0 -37
  579. data/sig/temporalio/connection/service.rbs +0 -14
  580. data/sig/temporalio/connection/test_service.rbs +0 -13
  581. data/sig/temporalio/connection/tls_options.rbs +0 -43
  582. data/sig/temporalio/connection/workflow_service.rbs +0 -48
  583. data/sig/temporalio/connection.rbs +0 -30
  584. data/sig/temporalio/data_converter.rbs +0 -35
  585. data/sig/temporalio/error/failure.rbs +0 -121
  586. data/sig/temporalio/error/workflow_failure.rbs +0 -9
  587. data/sig/temporalio/errors.rbs +0 -36
  588. data/sig/temporalio/failure_converter/base.rbs +0 -12
  589. data/sig/temporalio/failure_converter/basic.rbs +0 -86
  590. data/sig/temporalio/failure_converter.rbs +0 -5
  591. data/sig/temporalio/interceptor/activity_inbound.rbs +0 -21
  592. data/sig/temporalio/interceptor/activity_outbound.rbs +0 -10
  593. data/sig/temporalio/interceptor/chain.rbs +0 -24
  594. data/sig/temporalio/interceptor/client.rbs +0 -148
  595. data/sig/temporalio/interceptor.rbs +0 -6
  596. data/sig/temporalio/payload_codec/base.rbs +0 -12
  597. data/sig/temporalio/payload_converter/base.rbs +0 -12
  598. data/sig/temporalio/payload_converter/bytes.rbs +0 -9
  599. data/sig/temporalio/payload_converter/composite.rbs +0 -19
  600. data/sig/temporalio/payload_converter/encoding_base.rbs +0 -14
  601. data/sig/temporalio/payload_converter/json.rbs +0 -9
  602. data/sig/temporalio/payload_converter/nil.rbs +0 -9
  603. data/sig/temporalio/payload_converter.rbs +0 -5
  604. data/sig/temporalio/retry_policy.rbs +0 -25
  605. data/sig/temporalio/retry_state.rbs +0 -20
  606. data/sig/temporalio/runtime.rbs +0 -12
  607. data/sig/temporalio/testing/time_skipping_handle.rbs +0 -15
  608. data/sig/temporalio/testing/time_skipping_interceptor.rbs +0 -13
  609. data/sig/temporalio/testing/workflow_environment.rbs +0 -22
  610. data/sig/temporalio/testing.rbs +0 -35
  611. data/sig/temporalio/timeout_type.rbs +0 -15
  612. data/sig/temporalio/version.rbs +0 -3
  613. data/sig/temporalio/worker/activity_runner.rbs +0 -35
  614. data/sig/temporalio/worker/activity_worker.rbs +0 -44
  615. data/sig/temporalio/worker/reactor.rbs +0 -22
  616. data/sig/temporalio/worker/runner.rbs +0 -21
  617. data/sig/temporalio/worker/sync_worker.rbs +0 -23
  618. data/sig/temporalio/worker/thread_pool_executor.rbs +0 -23
  619. data/sig/temporalio/worker.rbs +0 -46
  620. data/sig/temporalio/workflow/async.rbs +0 -9
  621. data/sig/temporalio/workflow/execution_info.rbs +0 -55
  622. data/sig/temporalio/workflow/execution_status.rbs +0 -21
  623. data/sig/temporalio/workflow/future.rbs +0 -40
  624. data/sig/temporalio/workflow/id_reuse_policy.rbs +0 -15
  625. data/sig/temporalio/workflow/info.rbs +0 -55
  626. data/sig/temporalio/workflow/query_reject_condition.rbs +0 -14
  627. data/sig/temporalio.rbs +0 -2
  628. 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
- }