temporalio 0.0.1 → 0.1.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 (310) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +180 -7
  3. data/bridge/Cargo.lock +208 -76
  4. data/bridge/Cargo.toml +5 -2
  5. data/bridge/sdk-core/Cargo.toml +1 -1
  6. data/bridge/sdk-core/README.md +20 -10
  7. data/bridge/sdk-core/client/Cargo.toml +1 -1
  8. data/bridge/sdk-core/client/src/lib.rs +227 -59
  9. data/bridge/sdk-core/client/src/metrics.rs +17 -8
  10. data/bridge/sdk-core/client/src/raw.rs +13 -12
  11. data/bridge/sdk-core/client/src/retry.rs +132 -43
  12. data/bridge/sdk-core/core/Cargo.toml +28 -15
  13. data/bridge/sdk-core/core/benches/workflow_replay.rs +13 -10
  14. data/bridge/sdk-core/core/src/abstractions.rs +225 -36
  15. data/bridge/sdk-core/core/src/core_tests/activity_tasks.rs +217 -79
  16. data/bridge/sdk-core/core/src/core_tests/determinism.rs +165 -2
  17. data/bridge/sdk-core/core/src/core_tests/local_activities.rs +565 -34
  18. data/bridge/sdk-core/core/src/core_tests/queries.rs +247 -90
  19. data/bridge/sdk-core/core/src/core_tests/workers.rs +3 -5
  20. data/bridge/sdk-core/core/src/core_tests/workflow_cancels.rs +1 -1
  21. data/bridge/sdk-core/core/src/core_tests/workflow_tasks.rs +430 -67
  22. data/bridge/sdk-core/core/src/ephemeral_server/mod.rs +106 -12
  23. data/bridge/sdk-core/core/src/internal_flags.rs +136 -0
  24. data/bridge/sdk-core/core/src/lib.rs +148 -34
  25. data/bridge/sdk-core/core/src/protosext/mod.rs +1 -1
  26. data/bridge/sdk-core/core/src/replay/mod.rs +185 -41
  27. data/bridge/sdk-core/core/src/telemetry/log_export.rs +190 -0
  28. data/bridge/sdk-core/core/src/telemetry/metrics.rs +219 -140
  29. data/bridge/sdk-core/core/src/telemetry/mod.rs +326 -315
  30. data/bridge/sdk-core/core/src/telemetry/prometheus_server.rs +20 -14
  31. data/bridge/sdk-core/core/src/test_help/mod.rs +85 -21
  32. data/bridge/sdk-core/core/src/worker/activities/activity_heartbeat_manager.rs +112 -156
  33. data/bridge/sdk-core/core/src/worker/activities/activity_task_poller_stream.rs +89 -0
  34. data/bridge/sdk-core/core/src/worker/activities/local_activities.rs +364 -128
  35. data/bridge/sdk-core/core/src/worker/activities.rs +263 -170
  36. data/bridge/sdk-core/core/src/worker/client/mocks.rs +23 -3
  37. data/bridge/sdk-core/core/src/worker/client.rs +48 -6
  38. data/bridge/sdk-core/core/src/worker/mod.rs +186 -75
  39. data/bridge/sdk-core/core/src/worker/workflow/bridge.rs +1 -3
  40. data/bridge/sdk-core/core/src/worker/workflow/driven_workflow.rs +13 -24
  41. data/bridge/sdk-core/core/src/worker/workflow/history_update.rs +879 -226
  42. data/bridge/sdk-core/core/src/worker/workflow/machines/activity_state_machine.rs +101 -48
  43. data/bridge/sdk-core/core/src/worker/workflow/machines/cancel_external_state_machine.rs +8 -12
  44. data/bridge/sdk-core/core/src/worker/workflow/machines/cancel_workflow_state_machine.rs +6 -9
  45. data/bridge/sdk-core/core/src/worker/workflow/machines/child_workflow_state_machine.rs +90 -32
  46. data/bridge/sdk-core/core/src/worker/workflow/machines/complete_workflow_state_machine.rs +6 -9
  47. data/bridge/sdk-core/core/src/worker/workflow/machines/continue_as_new_workflow_state_machine.rs +7 -10
  48. data/bridge/sdk-core/core/src/worker/workflow/machines/fail_workflow_state_machine.rs +6 -9
  49. data/bridge/sdk-core/core/src/worker/workflow/machines/local_activity_state_machine.rs +160 -83
  50. data/bridge/sdk-core/core/src/worker/workflow/machines/mod.rs +36 -54
  51. data/bridge/sdk-core/core/src/worker/workflow/machines/modify_workflow_properties_state_machine.rs +179 -0
  52. data/bridge/sdk-core/core/src/worker/workflow/machines/patch_state_machine.rs +104 -157
  53. data/bridge/sdk-core/core/src/worker/workflow/machines/signal_external_state_machine.rs +8 -12
  54. data/bridge/sdk-core/core/src/worker/workflow/machines/timer_state_machine.rs +9 -13
  55. data/bridge/sdk-core/core/src/worker/workflow/machines/transition_coverage.rs +10 -4
  56. data/bridge/sdk-core/core/src/worker/workflow/machines/upsert_search_attributes_state_machine.rs +14 -11
  57. data/bridge/sdk-core/core/src/worker/workflow/machines/workflow_machines/local_acts.rs +6 -17
  58. data/bridge/sdk-core/core/src/worker/workflow/machines/workflow_machines.rs +395 -299
  59. data/bridge/sdk-core/core/src/worker/workflow/machines/workflow_task_state_machine.rs +12 -20
  60. data/bridge/sdk-core/core/src/worker/workflow/managed_run/managed_wf_test.rs +33 -18
  61. data/bridge/sdk-core/core/src/worker/workflow/managed_run.rs +1032 -374
  62. data/bridge/sdk-core/core/src/worker/workflow/mod.rs +525 -392
  63. data/bridge/sdk-core/core/src/worker/workflow/run_cache.rs +40 -57
  64. data/bridge/sdk-core/core/src/worker/workflow/wft_extraction.rs +125 -0
  65. data/bridge/sdk-core/core/src/worker/workflow/wft_poller.rs +3 -6
  66. data/bridge/sdk-core/core/src/worker/workflow/workflow_stream/saved_wf_inputs.rs +117 -0
  67. data/bridge/sdk-core/core/src/worker/workflow/workflow_stream/tonic_status_serde.rs +24 -0
  68. data/bridge/sdk-core/core/src/worker/workflow/workflow_stream.rs +456 -681
  69. data/bridge/sdk-core/core-api/Cargo.toml +6 -4
  70. data/bridge/sdk-core/core-api/src/errors.rs +1 -34
  71. data/bridge/sdk-core/core-api/src/lib.rs +7 -45
  72. data/bridge/sdk-core/core-api/src/telemetry.rs +141 -0
  73. data/bridge/sdk-core/core-api/src/worker.rs +27 -1
  74. data/bridge/sdk-core/etc/deps.svg +115 -140
  75. data/bridge/sdk-core/etc/regen-depgraph.sh +5 -0
  76. data/bridge/sdk-core/fsm/rustfsm_procmacro/src/lib.rs +18 -15
  77. data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/no_handle_conversions_require_into_fail.stderr +1 -1
  78. data/bridge/sdk-core/fsm/rustfsm_trait/src/lib.rs +8 -3
  79. data/bridge/sdk-core/histories/evict_while_la_running_no_interference-16_history.bin +0 -0
  80. data/bridge/sdk-core/histories/evict_while_la_running_no_interference-23_history.bin +0 -0
  81. data/bridge/sdk-core/histories/evict_while_la_running_no_interference-85_history.bin +0 -0
  82. data/bridge/sdk-core/protos/api_upstream/buf.yaml +0 -3
  83. data/bridge/sdk-core/protos/api_upstream/build/go.mod +7 -0
  84. data/bridge/sdk-core/protos/api_upstream/build/go.sum +5 -0
  85. data/bridge/sdk-core/protos/api_upstream/{temporal/api/enums/v1/cluster.proto → build/tools.go} +7 -18
  86. data/bridge/sdk-core/protos/api_upstream/go.mod +6 -0
  87. data/bridge/sdk-core/protos/api_upstream/temporal/api/batch/v1/message.proto +12 -9
  88. data/bridge/sdk-core/protos/api_upstream/temporal/api/command/v1/message.proto +15 -26
  89. data/bridge/sdk-core/protos/api_upstream/temporal/api/common/v1/message.proto +13 -2
  90. data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/batch_operation.proto +3 -2
  91. data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/command_type.proto +4 -9
  92. data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/common.proto +3 -2
  93. data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/event_type.proto +10 -8
  94. data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/failed_cause.proto +28 -2
  95. data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/namespace.proto +2 -2
  96. data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/query.proto +2 -2
  97. data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/reset.proto +2 -2
  98. data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/schedule.proto +2 -2
  99. data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/task_queue.proto +2 -2
  100. data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/update.proto +24 -19
  101. data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/workflow.proto +2 -2
  102. data/bridge/sdk-core/protos/api_upstream/temporal/api/errordetails/v1/message.proto +2 -2
  103. data/bridge/sdk-core/protos/api_upstream/temporal/api/failure/v1/message.proto +2 -2
  104. data/bridge/sdk-core/protos/api_upstream/temporal/api/filter/v1/message.proto +2 -2
  105. data/bridge/sdk-core/protos/api_upstream/temporal/api/history/v1/message.proto +62 -26
  106. data/bridge/sdk-core/protos/api_upstream/temporal/api/namespace/v1/message.proto +4 -2
  107. data/bridge/sdk-core/protos/api_upstream/temporal/api/operatorservice/v1/request_response.proto +24 -61
  108. data/bridge/sdk-core/protos/api_upstream/temporal/api/operatorservice/v1/service.proto +2 -21
  109. data/bridge/sdk-core/protos/api_upstream/temporal/api/protocol/v1/message.proto +57 -0
  110. data/bridge/sdk-core/protos/api_upstream/temporal/api/query/v1/message.proto +2 -2
  111. data/bridge/sdk-core/protos/api_upstream/temporal/api/replication/v1/message.proto +2 -2
  112. data/bridge/sdk-core/protos/api_upstream/temporal/api/schedule/v1/message.proto +110 -31
  113. data/bridge/sdk-core/protos/api_upstream/temporal/api/sdk/v1/task_complete_metadata.proto +63 -0
  114. data/bridge/sdk-core/protos/api_upstream/temporal/api/taskqueue/v1/message.proto +4 -4
  115. data/bridge/sdk-core/protos/api_upstream/temporal/api/update/v1/message.proto +71 -6
  116. data/bridge/sdk-core/protos/api_upstream/temporal/api/version/v1/message.proto +2 -2
  117. data/bridge/sdk-core/protos/api_upstream/temporal/api/workflow/v1/message.proto +3 -2
  118. data/bridge/sdk-core/protos/api_upstream/temporal/api/workflowservice/v1/request_response.proto +111 -36
  119. data/bridge/sdk-core/protos/api_upstream/temporal/api/workflowservice/v1/service.proto +19 -5
  120. data/bridge/sdk-core/protos/local/temporal/sdk/core/activity_result/activity_result.proto +1 -0
  121. data/bridge/sdk-core/protos/local/temporal/sdk/core/activity_task/activity_task.proto +1 -0
  122. data/bridge/sdk-core/protos/local/temporal/sdk/core/child_workflow/child_workflow.proto +1 -0
  123. data/bridge/sdk-core/protos/local/temporal/sdk/core/common/common.proto +1 -0
  124. data/bridge/sdk-core/protos/local/temporal/sdk/core/core_interface.proto +1 -0
  125. data/bridge/sdk-core/protos/local/temporal/sdk/core/external_data/external_data.proto +1 -0
  126. data/bridge/sdk-core/protos/local/temporal/sdk/core/workflow_activation/workflow_activation.proto +9 -0
  127. data/bridge/sdk-core/protos/local/temporal/sdk/core/workflow_commands/workflow_commands.proto +9 -1
  128. data/bridge/sdk-core/protos/local/temporal/sdk/core/workflow_completion/workflow_completion.proto +6 -0
  129. data/bridge/sdk-core/protos/testsrv_upstream/temporal/api/testservice/v1/request_response.proto +2 -2
  130. data/bridge/sdk-core/protos/testsrv_upstream/temporal/api/testservice/v1/service.proto +2 -2
  131. data/bridge/sdk-core/sdk/Cargo.toml +4 -3
  132. data/bridge/sdk-core/sdk/src/interceptors.rs +36 -3
  133. data/bridge/sdk-core/sdk/src/lib.rs +94 -25
  134. data/bridge/sdk-core/sdk/src/workflow_context.rs +13 -2
  135. data/bridge/sdk-core/sdk/src/workflow_future.rs +10 -13
  136. data/bridge/sdk-core/sdk-core-protos/Cargo.toml +5 -2
  137. data/bridge/sdk-core/sdk-core-protos/build.rs +36 -2
  138. data/bridge/sdk-core/sdk-core-protos/src/history_builder.rs +164 -104
  139. data/bridge/sdk-core/sdk-core-protos/src/history_info.rs +27 -23
  140. data/bridge/sdk-core/sdk-core-protos/src/lib.rs +252 -74
  141. data/bridge/sdk-core/sdk-core-protos/src/task_token.rs +12 -2
  142. data/bridge/sdk-core/test-utils/Cargo.toml +4 -1
  143. data/bridge/sdk-core/test-utils/src/canned_histories.rs +106 -296
  144. data/bridge/sdk-core/test-utils/src/histfetch.rs +1 -1
  145. data/bridge/sdk-core/test-utils/src/lib.rs +161 -50
  146. data/bridge/sdk-core/test-utils/src/wf_input_saver.rs +50 -0
  147. data/bridge/sdk-core/test-utils/src/workflows.rs +29 -0
  148. data/bridge/sdk-core/tests/fuzzy_workflow.rs +130 -0
  149. data/bridge/sdk-core/tests/{load_tests.rs → heavy_tests.rs} +125 -51
  150. data/bridge/sdk-core/tests/integ_tests/ephemeral_server_tests.rs +25 -3
  151. data/bridge/sdk-core/tests/integ_tests/heartbeat_tests.rs +10 -5
  152. data/bridge/sdk-core/tests/integ_tests/metrics_tests.rs +239 -0
  153. data/bridge/sdk-core/tests/integ_tests/polling_tests.rs +4 -60
  154. data/bridge/sdk-core/tests/integ_tests/queries_tests.rs +5 -128
  155. data/bridge/sdk-core/tests/integ_tests/visibility_tests.rs +83 -25
  156. data/bridge/sdk-core/tests/integ_tests/workflow_tests/activities.rs +93 -69
  157. data/bridge/sdk-core/tests/integ_tests/workflow_tests/cancel_external.rs +1 -0
  158. data/bridge/sdk-core/tests/integ_tests/workflow_tests/cancel_wf.rs +6 -13
  159. data/bridge/sdk-core/tests/integ_tests/workflow_tests/child_workflows.rs +1 -0
  160. data/bridge/sdk-core/tests/integ_tests/workflow_tests/continue_as_new.rs +6 -2
  161. data/bridge/sdk-core/tests/integ_tests/workflow_tests/determinism.rs +3 -10
  162. data/bridge/sdk-core/tests/integ_tests/workflow_tests/local_activities.rs +151 -116
  163. data/bridge/sdk-core/tests/integ_tests/workflow_tests/modify_wf_properties.rs +54 -0
  164. data/bridge/sdk-core/tests/integ_tests/workflow_tests/patches.rs +7 -28
  165. data/bridge/sdk-core/tests/integ_tests/workflow_tests/replay.rs +115 -24
  166. data/bridge/sdk-core/tests/integ_tests/workflow_tests/resets.rs +1 -0
  167. data/bridge/sdk-core/tests/integ_tests/workflow_tests/signals.rs +18 -14
  168. data/bridge/sdk-core/tests/integ_tests/workflow_tests/stickyness.rs +6 -20
  169. data/bridge/sdk-core/tests/integ_tests/workflow_tests/timers.rs +10 -21
  170. data/bridge/sdk-core/tests/integ_tests/workflow_tests/upsert_search_attrs.rs +6 -4
  171. data/bridge/sdk-core/tests/integ_tests/workflow_tests.rs +27 -18
  172. data/bridge/sdk-core/tests/main.rs +8 -16
  173. data/bridge/sdk-core/tests/runner.rs +75 -36
  174. data/bridge/sdk-core/tests/wf_input_replay.rs +32 -0
  175. data/bridge/src/connection.rs +117 -82
  176. data/bridge/src/lib.rs +356 -42
  177. data/bridge/src/runtime.rs +10 -3
  178. data/bridge/src/test_server.rs +153 -0
  179. data/bridge/src/worker.rs +133 -9
  180. data/lib/gen/temporal/api/batch/v1/message_pb.rb +8 -6
  181. data/lib/gen/temporal/api/command/v1/message_pb.rb +10 -16
  182. data/lib/gen/temporal/api/common/v1/message_pb.rb +5 -1
  183. data/lib/gen/temporal/api/enums/v1/batch_operation_pb.rb +2 -1
  184. data/lib/gen/temporal/api/enums/v1/command_type_pb.rb +3 -3
  185. data/lib/gen/temporal/api/enums/v1/common_pb.rb +2 -1
  186. data/lib/gen/temporal/api/enums/v1/event_type_pb.rb +5 -4
  187. data/lib/gen/temporal/api/enums/v1/failed_cause_pb.rb +9 -1
  188. data/lib/gen/temporal/api/enums/v1/namespace_pb.rb +1 -1
  189. data/lib/gen/temporal/api/enums/v1/query_pb.rb +1 -1
  190. data/lib/gen/temporal/api/enums/v1/reset_pb.rb +1 -1
  191. data/lib/gen/temporal/api/enums/v1/schedule_pb.rb +1 -1
  192. data/lib/gen/temporal/api/enums/v1/task_queue_pb.rb +1 -1
  193. data/lib/gen/temporal/api/enums/v1/update_pb.rb +7 -10
  194. data/lib/gen/temporal/api/enums/v1/workflow_pb.rb +1 -1
  195. data/lib/gen/temporal/api/errordetails/v1/message_pb.rb +1 -1
  196. data/lib/gen/temporal/api/failure/v1/message_pb.rb +1 -1
  197. data/lib/gen/temporal/api/filter/v1/message_pb.rb +1 -1
  198. data/lib/gen/temporal/api/history/v1/message_pb.rb +34 -25
  199. data/lib/gen/temporal/api/namespace/v1/message_pb.rb +2 -1
  200. data/lib/gen/temporal/api/operatorservice/v1/request_response_pb.rb +14 -51
  201. data/lib/gen/temporal/api/operatorservice/v1/service_pb.rb +1 -1
  202. data/lib/gen/temporal/api/protocol/v1/message_pb.rb +30 -0
  203. data/lib/gen/temporal/api/query/v1/message_pb.rb +1 -1
  204. data/lib/gen/temporal/api/replication/v1/message_pb.rb +1 -1
  205. data/lib/gen/temporal/api/schedule/v1/message_pb.rb +22 -1
  206. data/lib/gen/temporal/api/sdk/v1/task_complete_metadata_pb.rb +23 -0
  207. data/lib/gen/temporal/api/taskqueue/v1/message_pb.rb +2 -2
  208. data/lib/gen/temporal/api/testservice/v1/request_response_pb.rb +49 -0
  209. data/lib/gen/temporal/api/testservice/v1/service_pb.rb +21 -0
  210. data/lib/gen/temporal/api/update/v1/message_pb.rb +49 -3
  211. data/lib/gen/temporal/api/version/v1/message_pb.rb +1 -1
  212. data/lib/gen/temporal/api/workflow/v1/message_pb.rb +2 -1
  213. data/lib/gen/temporal/api/workflowservice/v1/request_response_pb.rb +47 -20
  214. data/lib/gen/temporal/api/workflowservice/v1/service_pb.rb +1 -1
  215. data/lib/gen/temporal/sdk/core/activity_result/activity_result_pb.rb +13 -9
  216. data/lib/gen/temporal/sdk/core/activity_task/activity_task_pb.rb +10 -6
  217. data/lib/gen/temporal/sdk/core/child_workflow/child_workflow_pb.rb +13 -9
  218. data/lib/gen/temporal/sdk/core/common/common_pb.rb +7 -3
  219. data/lib/gen/temporal/sdk/core/core_interface_pb.rb +9 -3
  220. data/lib/gen/temporal/sdk/core/external_data/external_data_pb.rb +7 -3
  221. data/lib/gen/temporal/sdk/core/workflow_activation/workflow_activation_pb.rb +28 -21
  222. data/lib/gen/temporal/sdk/core/workflow_commands/workflow_commands_pb.rb +32 -24
  223. data/lib/gen/temporal/sdk/core/workflow_completion/workflow_completion_pb.rb +12 -5
  224. data/lib/temporalio/activity/context.rb +102 -0
  225. data/lib/temporalio/activity/info.rb +67 -0
  226. data/lib/temporalio/activity.rb +85 -0
  227. data/lib/temporalio/bridge/connect_options.rb +15 -0
  228. data/lib/temporalio/bridge/error.rb +8 -0
  229. data/lib/temporalio/bridge/retry_config.rb +24 -0
  230. data/lib/temporalio/bridge/tls_options.rb +19 -0
  231. data/lib/temporalio/bridge.rb +14 -0
  232. data/lib/{temporal → temporalio}/client/implementation.rb +57 -56
  233. data/lib/{temporal → temporalio}/client/workflow_handle.rb +35 -35
  234. data/lib/{temporal → temporalio}/client.rb +19 -32
  235. data/lib/temporalio/connection/retry_config.rb +44 -0
  236. data/lib/temporalio/connection/service.rb +20 -0
  237. data/lib/temporalio/connection/test_service.rb +92 -0
  238. data/lib/temporalio/connection/tls_options.rb +51 -0
  239. data/lib/temporalio/connection/workflow_service.rb +731 -0
  240. data/lib/temporalio/connection.rb +86 -0
  241. data/lib/{temporal → temporalio}/data_converter.rb +76 -35
  242. data/lib/{temporal → temporalio}/error/failure.rb +6 -6
  243. data/lib/{temporal → temporalio}/error/workflow_failure.rb +4 -2
  244. data/lib/{temporal → temporalio}/errors.rb +19 -1
  245. data/lib/{temporal → temporalio}/failure_converter/base.rb +5 -5
  246. data/lib/{temporal → temporalio}/failure_converter/basic.rb +58 -52
  247. data/lib/temporalio/failure_converter.rb +7 -0
  248. data/lib/temporalio/interceptor/activity_inbound.rb +22 -0
  249. data/lib/temporalio/interceptor/activity_outbound.rb +24 -0
  250. data/lib/{temporal → temporalio}/interceptor/chain.rb +7 -6
  251. data/lib/{temporal → temporalio}/interceptor/client.rb +27 -2
  252. data/lib/temporalio/interceptor.rb +22 -0
  253. data/lib/{temporal → temporalio}/payload_codec/base.rb +5 -5
  254. data/lib/{temporal → temporalio}/payload_converter/base.rb +3 -3
  255. data/lib/{temporal → temporalio}/payload_converter/bytes.rb +4 -3
  256. data/lib/{temporal → temporalio}/payload_converter/composite.rb +7 -5
  257. data/lib/{temporal → temporalio}/payload_converter/encoding_base.rb +4 -4
  258. data/lib/{temporal → temporalio}/payload_converter/json.rb +4 -3
  259. data/lib/{temporal → temporalio}/payload_converter/nil.rb +4 -3
  260. data/lib/temporalio/payload_converter.rb +14 -0
  261. data/lib/{temporal → temporalio}/retry_policy.rb +17 -7
  262. data/lib/{temporal → temporalio}/retry_state.rb +1 -1
  263. data/lib/temporalio/runtime.rb +25 -0
  264. data/lib/temporalio/testing/time_skipping_handle.rb +32 -0
  265. data/lib/temporalio/testing/time_skipping_interceptor.rb +23 -0
  266. data/lib/temporalio/testing/workflow_environment.rb +112 -0
  267. data/lib/temporalio/testing.rb +175 -0
  268. data/lib/{temporal → temporalio}/timeout_type.rb +2 -2
  269. data/lib/temporalio/version.rb +3 -0
  270. data/lib/temporalio/worker/activity_runner.rb +114 -0
  271. data/lib/temporalio/worker/activity_worker.rb +164 -0
  272. data/lib/temporalio/worker/reactor.rb +46 -0
  273. data/lib/temporalio/worker/runner.rb +63 -0
  274. data/lib/temporalio/worker/sync_worker.rb +124 -0
  275. data/lib/temporalio/worker/thread_pool_executor.rb +51 -0
  276. data/lib/temporalio/worker.rb +204 -0
  277. data/lib/temporalio/workflow/async.rb +46 -0
  278. data/lib/{temporal → temporalio}/workflow/execution_info.rb +4 -4
  279. data/lib/{temporal → temporalio}/workflow/execution_status.rb +1 -1
  280. data/lib/temporalio/workflow/future.rb +138 -0
  281. data/lib/{temporal → temporalio}/workflow/id_reuse_policy.rb +6 -6
  282. data/lib/temporalio/workflow/info.rb +76 -0
  283. data/lib/{temporal → temporalio}/workflow/query_reject_condition.rb +5 -5
  284. data/lib/temporalio.rb +12 -3
  285. data/temporalio.gemspec +11 -6
  286. metadata +137 -64
  287. data/bridge/sdk-core/Cargo.lock +0 -2606
  288. data/bridge/sdk-core/bridge-ffi/Cargo.toml +0 -24
  289. data/bridge/sdk-core/bridge-ffi/LICENSE.txt +0 -23
  290. data/bridge/sdk-core/bridge-ffi/build.rs +0 -25
  291. data/bridge/sdk-core/bridge-ffi/include/sdk-core-bridge.h +0 -249
  292. data/bridge/sdk-core/bridge-ffi/src/lib.rs +0 -825
  293. data/bridge/sdk-core/bridge-ffi/src/wrappers.rs +0 -211
  294. data/bridge/sdk-core/core/src/log_export.rs +0 -62
  295. data/bridge/sdk-core/core/src/worker/workflow/machines/mutable_side_effect_state_machine.rs +0 -127
  296. data/bridge/sdk-core/core/src/worker/workflow/machines/side_effect_state_machine.rs +0 -71
  297. data/bridge/sdk-core/protos/api_upstream/temporal/api/cluster/v1/message.proto +0 -83
  298. data/bridge/sdk-core/protos/local/temporal/sdk/core/bridge/bridge.proto +0 -210
  299. data/bridge/sdk-core/sdk/src/conversions.rs +0 -8
  300. data/lib/bridge.so +0 -0
  301. data/lib/gen/temporal/api/cluster/v1/message_pb.rb +0 -67
  302. data/lib/gen/temporal/api/enums/v1/cluster_pb.rb +0 -26
  303. data/lib/gen/temporal/sdk/core/bridge/bridge_pb.rb +0 -222
  304. data/lib/temporal/bridge.rb +0 -14
  305. data/lib/temporal/connection.rb +0 -736
  306. data/lib/temporal/failure_converter.rb +0 -8
  307. data/lib/temporal/payload_converter.rb +0 -14
  308. data/lib/temporal/runtime.rb +0 -22
  309. data/lib/temporal/version.rb +0 -3
  310. data/lib/temporal.rb +0 -8
@@ -12,7 +12,10 @@ mod history_info;
12
12
  mod task_token;
13
13
 
14
14
  #[cfg(feature = "history_builders")]
15
- pub use history_builder::{default_wes_attribs, TestHistoryBuilder, DEFAULT_WORKFLOW_TYPE};
15
+ pub use history_builder::{
16
+ default_act_sched, default_wes_attribs, TestHistoryBuilder, DEFAULT_ACTIVITY_TYPE,
17
+ DEFAULT_WORKFLOW_TYPE,
18
+ };
16
19
  #[cfg(feature = "history_builders")]
17
20
  pub use history_info::HistoryInfo;
18
21
  pub use task_token::TaskToken;
@@ -26,7 +29,8 @@ pub mod coresdk {
26
29
  tonic::include_proto!("coresdk");
27
30
 
28
31
  use crate::temporal::api::{
29
- common::v1::{ActivityType, Payload, Payloads, WorkflowExecution},
32
+ common::v1::{Payload, Payloads, WorkflowExecution},
33
+ enums::v1::WorkflowTaskFailedCause,
30
34
  failure::v1::{failure::FailureInfo, ApplicationFailureInfo, Failure},
31
35
  workflowservice::v1::PollActivityTaskQueueResponse,
32
36
  };
@@ -66,8 +70,8 @@ pub mod coresdk {
66
70
  "ActivityTaskCompletion(token: {}",
67
71
  fmt_tt(&self.task_token),
68
72
  )?;
69
- if let Some(r) = self.result.as_ref() {
70
- write!(f, ", {}", r)?;
73
+ if let Some(r) = self.result.as_ref().and_then(|r| r.status.as_ref()) {
74
+ write!(f, ", {r}")?;
71
75
  } else {
72
76
  write!(f, ", missing result")?;
73
77
  }
@@ -120,21 +124,20 @@ pub mod coresdk {
120
124
  }
121
125
  }
122
126
 
123
- impl Display for ActivityExecutionResult {
127
+ impl Display for aer::Status {
124
128
  fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
125
129
  write!(f, "ActivityExecutionResult(")?;
126
- match self.status.as_ref() {
127
- None => write!(f, "missing result)"),
128
- Some(aer::Status::Completed(v)) => {
129
- write!(f, "{})", v)
130
+ match self {
131
+ aer::Status::Completed(v) => {
132
+ write!(f, "{v})")
130
133
  }
131
- Some(aer::Status::Failed(v)) => {
132
- write!(f, "{})", v)
134
+ aer::Status::Failed(v) => {
135
+ write!(f, "{v})")
133
136
  }
134
- Some(aer::Status::Cancelled(v)) => {
135
- write!(f, "{})", v)
137
+ aer::Status::Cancelled(v) => {
138
+ write!(f, "{v})")
136
139
  }
137
- Some(aer::Status::WillCompleteAsync(_)) => {
140
+ aer::Status::WillCompleteAsync(_) => {
138
141
  write!(f, "Will complete async)")
139
142
  }
140
143
  }
@@ -145,7 +148,7 @@ pub mod coresdk {
145
148
  fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
146
149
  write!(f, "Success(")?;
147
150
  if let Some(ref v) = self.result {
148
- write!(f, "{}", v)?;
151
+ write!(f, "{v}")?;
149
152
  }
150
153
  write!(f, ")")
151
154
  }
@@ -155,7 +158,7 @@ pub mod coresdk {
155
158
  fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
156
159
  write!(f, "Failure(")?;
157
160
  if let Some(ref v) = self.failure {
158
- write!(f, "{}", v)?;
161
+ write!(f, "{v}")?;
159
162
  }
160
163
  write!(f, ")")
161
164
  }
@@ -165,7 +168,7 @@ pub mod coresdk {
165
168
  fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
166
169
  write!(f, "Cancellation(")?;
167
170
  if let Some(ref v) = self.failure {
168
- write!(f, "{}", v)?;
171
+ write!(f, "{v}")?;
169
172
  }
170
173
  write!(f, ")")
171
174
  }
@@ -186,7 +189,7 @@ pub mod coresdk {
186
189
  pub fn unwrap_ok_payload(self) -> Payload {
187
190
  match self.status.unwrap() {
188
191
  activity_resolution::Status::Completed(c) => c.result.unwrap(),
189
- _ => panic!("Activity was not successful"),
192
+ e => panic!("Activity was not successful: {e:?}"),
190
193
  }
191
194
  }
192
195
 
@@ -198,11 +201,15 @@ pub mod coresdk {
198
201
  matches!(self.status, Some(activity_resolution::Status::Failed(_)))
199
202
  }
200
203
 
201
- pub fn timed_out(&self) -> bool {
202
- matches!(self.status, Some(activity_resolution::Status::Failed(Failure {
203
- failure: Some(ref f)
204
- })) if f.is_timeout()
205
- || f.cause.as_ref().map(|c| c.is_timeout()).unwrap_or_default())
204
+ pub fn timed_out(&self) -> Option<crate::temporal::api::enums::v1::TimeoutType> {
205
+ match self.status {
206
+ Some(activity_resolution::Status::Failed(Failure {
207
+ failure: Some(ref f),
208
+ })) => f
209
+ .is_timeout()
210
+ .or_else(|| f.cause.as_ref().and_then(|c| c.is_timeout())),
211
+ _ => None,
212
+ }
206
213
  }
207
214
 
208
215
  pub fn cancelled(&self) -> bool {
@@ -244,10 +251,6 @@ pub mod coresdk {
244
251
  }
245
252
  }
246
253
 
247
- pub mod bridge {
248
- tonic::include_proto!("coresdk.bridge");
249
- }
250
-
251
254
  pub mod common {
252
255
  tonic::include_proto!("coresdk.common");
253
256
  use super::external_data::LocalActivityMarkerData;
@@ -318,7 +321,7 @@ pub mod coresdk {
318
321
  }
319
322
 
320
323
  pub mod external_data {
321
- use prost_types::{Duration, Timestamp};
324
+ use prost_wkt_types::{Duration, Timestamp};
322
325
  use serde::{Deserialize, Deserializer, Serialize, Serializer};
323
326
  tonic::include_proto!("coresdk.external_data");
324
327
 
@@ -397,6 +400,7 @@ pub mod coresdk {
397
400
  },
398
401
  temporal::api::{
399
402
  common::v1::Header,
403
+ enums::v1::WorkflowTaskFailedCause,
400
404
  history::v1::{
401
405
  WorkflowExecutionCancelRequestedEventAttributes,
402
406
  WorkflowExecutionSignaledEventAttributes,
@@ -405,6 +409,7 @@ pub mod coresdk {
405
409
  query::v1::WorkflowQuery,
406
410
  },
407
411
  };
412
+ use prost_wkt_types::Timestamp;
408
413
  use std::{
409
414
  collections::HashMap,
410
415
  fmt::{Display, Formatter},
@@ -428,6 +433,7 @@ pub mod coresdk {
428
433
  reason: reason as i32,
429
434
  }),
430
435
  )],
436
+ available_internal_flags: vec![],
431
437
  }
432
438
  }
433
439
 
@@ -491,7 +497,18 @@ pub mod coresdk {
491
497
 
492
498
  impl Display for EvictionReason {
493
499
  fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
494
- write!(f, "{:?}", self)
500
+ write!(f, "{self:?}")
501
+ }
502
+ }
503
+
504
+ impl From<EvictionReason> for WorkflowTaskFailedCause {
505
+ fn from(value: EvictionReason) -> Self {
506
+ match value {
507
+ EvictionReason::Nondeterminism => {
508
+ WorkflowTaskFailedCause::NonDeterministicError
509
+ }
510
+ _ => WorkflowTaskFailedCause::Unspecified,
511
+ }
495
512
  }
496
513
  }
497
514
 
@@ -517,7 +534,7 @@ pub mod coresdk {
517
534
  fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
518
535
  match &self.variant {
519
536
  None => write!(f, "empty"),
520
- Some(v) => write!(f, "{}", v),
537
+ Some(v) => write!(f, "{v}"),
521
538
  }
522
539
  }
523
540
  }
@@ -600,6 +617,7 @@ pub mod coresdk {
600
617
  attrs: WorkflowExecutionStartedEventAttributes,
601
618
  workflow_id: String,
602
619
  randomness_seed: u64,
620
+ start_time: Timestamp,
603
621
  ) -> StartWorkflow {
604
622
  StartWorkflow {
605
623
  workflow_type: attrs.workflow_type.map(|wt| wt.name).unwrap_or_default(),
@@ -633,12 +651,13 @@ pub mod coresdk {
633
651
  cron_schedule_to_schedule_interval: attrs.first_workflow_task_backoff,
634
652
  memo: attrs.memo,
635
653
  search_attributes: attrs.search_attributes,
654
+ start_time: Some(start_time),
636
655
  }
637
656
  }
638
657
  }
639
658
 
640
659
  pub mod workflow_completion {
641
- use crate::temporal::api::failure;
660
+ use crate::temporal::api::{enums::v1::WorkflowTaskFailedCause, failure};
642
661
  tonic::include_proto!("coresdk.workflow_completion");
643
662
 
644
663
  impl workflow_activation_completion::Status {
@@ -652,7 +671,10 @@ pub mod coresdk {
652
671
 
653
672
  impl From<failure::v1::Failure> for Failure {
654
673
  fn from(f: failure::v1::Failure) -> Self {
655
- Failure { failure: Some(f) }
674
+ Failure {
675
+ failure: Some(f),
676
+ force_cause: WorkflowTaskFailedCause::Unspecified as i32,
677
+ }
656
678
  }
657
679
  }
658
680
  }
@@ -671,7 +693,7 @@ pub mod coresdk {
671
693
  fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
672
694
  match &self.variant {
673
695
  None => write!(f, "Empty"),
674
- Some(v) => write!(f, "{}", v),
696
+ Some(v) => write!(f, "{v}"),
675
697
  }
676
698
  }
677
699
  }
@@ -800,6 +822,16 @@ pub mod coresdk {
800
822
  }
801
823
  }
802
824
 
825
+ impl Display for ModifyWorkflowProperties {
826
+ fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
827
+ write!(
828
+ f,
829
+ "ModifyWorkflowProperties(upserted memo keys: {:?})",
830
+ self.upserted_memo.as_ref().map(|m| m.fields.keys())
831
+ )
832
+ }
833
+ }
834
+
803
835
  impl QueryResult {
804
836
  /// Helper to construct the Temporal API query result types.
805
837
  pub fn into_components(self) -> (String, QueryResultType, Option<Payloads>, String) {
@@ -841,7 +873,10 @@ pub mod coresdk {
841
873
 
842
874
  impl From<Vec<WorkflowCommand>> for workflow_completion::Success {
843
875
  fn from(v: Vec<WorkflowCommand>) -> Self {
844
- Self { commands: v }
876
+ Self {
877
+ commands: v,
878
+ used_internal_flags: vec![],
879
+ }
845
880
  }
846
881
  }
847
882
 
@@ -895,6 +930,7 @@ pub mod coresdk {
895
930
  status: Some(workflow_activation_completion::Status::Failed(
896
931
  workflow_completion::Failure {
897
932
  failure: Some(failure),
933
+ force_cause: WorkflowTaskFailedCause::Unspecified as i32,
898
934
  },
899
935
  )),
900
936
  }
@@ -978,6 +1014,12 @@ pub mod coresdk {
978
1014
  }
979
1015
  false
980
1016
  }
1017
+
1018
+ pub fn add_internal_flags(&mut self, patch: u32) {
1019
+ if let Some(workflow_activation_completion::Status::Successful(s)) = &mut self.status {
1020
+ s.used_internal_flags.push(patch);
1021
+ }
1022
+ }
981
1023
  }
982
1024
 
983
1025
  /// Makes converting outgoing lang commands into [WorkflowActivationCompletion]s easier
@@ -1015,7 +1057,7 @@ pub mod coresdk {
1015
1057
  )?;
1016
1058
  match &self.status {
1017
1059
  None => write!(f, "empty")?,
1018
- Some(s) => write!(f, "{}", s)?,
1060
+ Some(s) => write!(f, "{s}")?,
1019
1061
  };
1020
1062
  write!(f, ")")
1021
1063
  }
@@ -1025,12 +1067,12 @@ pub mod coresdk {
1025
1067
  fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
1026
1068
  match self {
1027
1069
  workflow_activation_completion::Status::Successful(
1028
- workflow_completion::Success { commands },
1070
+ workflow_completion::Success { commands, .. },
1029
1071
  ) => {
1030
1072
  write!(f, "Success(")?;
1031
1073
  let mut written = 0;
1032
1074
  for c in commands {
1033
- write!(f, "{} ", c)?;
1075
+ write!(f, "{c} ")?;
1034
1076
  written += 1;
1035
1077
  if written >= 10 && written < commands.len() {
1036
1078
  write!(f, "... {} more", commands.len() - written)?;
@@ -1082,21 +1124,12 @@ pub mod coresdk {
1082
1124
  }
1083
1125
  }
1084
1126
 
1085
- impl From<String> for ActivityType {
1086
- fn from(name: String) -> Self {
1087
- Self { name }
1088
- }
1089
- }
1090
-
1091
- impl From<ActivityType> for String {
1092
- fn from(at: ActivityType) -> Self {
1093
- at.name
1094
- }
1095
- }
1096
-
1097
1127
  impl Failure {
1098
- pub fn is_timeout(&self) -> bool {
1099
- matches!(self.failure_info, Some(FailureInfo::TimeoutFailureInfo(_)))
1128
+ pub fn is_timeout(&self) -> Option<crate::temporal::api::enums::v1::TimeoutType> {
1129
+ match &self.failure_info {
1130
+ Some(FailureInfo::TimeoutFailureInfo(ti)) => Some(ti.timeout_type()),
1131
+ _ => None,
1132
+ }
1100
1133
  }
1101
1134
 
1102
1135
  pub fn application_failure(message: String, non_retryable: bool) -> Self {
@@ -1112,6 +1145,26 @@ pub mod coresdk {
1112
1145
  }
1113
1146
  }
1114
1147
 
1148
+ pub fn application_failure_from_error(ae: anyhow::Error, non_retryable: bool) -> Self {
1149
+ Self {
1150
+ failure_info: Some(FailureInfo::ApplicationFailureInfo(
1151
+ ApplicationFailureInfo {
1152
+ non_retryable,
1153
+ ..Default::default()
1154
+ },
1155
+ )),
1156
+ ..ae.chain()
1157
+ .rfold(None, |cause, e| {
1158
+ Some(Self {
1159
+ message: e.to_string(),
1160
+ cause: cause.map(Box::new),
1161
+ ..Default::default()
1162
+ })
1163
+ })
1164
+ .unwrap_or_default()
1165
+ }
1166
+ }
1167
+
1115
1168
  /// Extracts an ApplicationFailureInfo from a Failure instance if it exists
1116
1169
  pub fn maybe_application_failure(&self) -> Option<&ApplicationFailureInfo> {
1117
1170
  if let Failure {
@@ -1182,7 +1235,7 @@ pub mod coresdk {
1182
1235
 
1183
1236
  impl From<anyhow::Error> for Failure {
1184
1237
  fn from(ae: anyhow::Error) -> Self {
1185
- Failure::application_failure(ae.to_string(), false)
1238
+ Failure::application_failure_from_error(ae, false)
1186
1239
  }
1187
1240
  }
1188
1241
 
@@ -1320,11 +1373,6 @@ pub mod coresdk {
1320
1373
  // This is disgusting, but unclear to me how to avoid it. TODO: Discuss w/ prost maintainer
1321
1374
  pub mod temporal {
1322
1375
  pub mod api {
1323
- pub mod cluster {
1324
- pub mod v1 {
1325
- tonic::include_proto!("temporal.api.cluster.v1");
1326
- }
1327
- }
1328
1376
  pub mod batch {
1329
1377
  pub mod v1 {
1330
1378
  tonic::include_proto!("temporal.api.batch.v1");
@@ -1414,6 +1462,16 @@ pub mod temporal {
1414
1462
  }
1415
1463
  }
1416
1464
 
1465
+ impl From<workflow_commands::ModifyWorkflowProperties> for command::Attributes {
1466
+ fn from(s: workflow_commands::ModifyWorkflowProperties) -> Self {
1467
+ Self::ModifyWorkflowPropertiesCommandAttributes(
1468
+ ModifyWorkflowPropertiesCommandAttributes {
1469
+ upserted_memo: s.upserted_memo.map(Into::into),
1470
+ },
1471
+ )
1472
+ }
1473
+ }
1474
+
1417
1475
  impl From<workflow_commands::CancelTimer> for command::Attributes {
1418
1476
  fn from(s: workflow_commands::CancelTimer) -> Self {
1419
1477
  Self::CancelTimerCommandAttributes(CancelTimerCommandAttributes {
@@ -1533,6 +1591,7 @@ pub mod temporal {
1533
1591
  }
1534
1592
  pub mod common {
1535
1593
  pub mod v1 {
1594
+ use base64::{prelude::BASE64_STANDARD, Engine};
1536
1595
  use std::{
1537
1596
  collections::HashMap,
1538
1597
  fmt::{Display, Formatter},
@@ -1569,11 +1628,11 @@ pub mod temporal {
1569
1628
  write!(
1570
1629
  f,
1571
1630
  "[{}..{}]",
1572
- base64::encode(windows.next().unwrap_or_default()),
1573
- base64::encode(windows.next_back().unwrap_or_default())
1631
+ BASE64_STANDARD.encode(windows.next().unwrap_or_default()),
1632
+ BASE64_STANDARD.encode(windows.next_back().unwrap_or_default())
1574
1633
  )
1575
1634
  } else {
1576
- write!(f, "[{}]", base64::encode(&self.data))
1635
+ write!(f, "[{}]", BASE64_STANDARD.encode(&self.data))
1577
1636
  }
1578
1637
  }
1579
1638
  }
@@ -1617,6 +1676,26 @@ pub mod temporal {
1617
1676
  }
1618
1677
  }
1619
1678
  }
1679
+
1680
+ impl From<String> for ActivityType {
1681
+ fn from(name: String) -> Self {
1682
+ Self { name }
1683
+ }
1684
+ }
1685
+
1686
+ impl From<&str> for ActivityType {
1687
+ fn from(name: &str) -> Self {
1688
+ Self {
1689
+ name: name.to_string(),
1690
+ }
1691
+ }
1692
+ }
1693
+
1694
+ impl From<ActivityType> for String {
1695
+ fn from(at: ActivityType) -> Self {
1696
+ at.name
1697
+ }
1698
+ }
1620
1699
  }
1621
1700
  }
1622
1701
  pub mod enums {
@@ -1647,14 +1726,7 @@ pub mod temporal {
1647
1726
 
1648
1727
  impl History {
1649
1728
  pub fn extract_run_id_from_start(&self) -> Result<&str, anyhow::Error> {
1650
- if let Some(
1651
- history_event::Attributes::WorkflowExecutionStartedEventAttributes(wes),
1652
- ) = self.events.get(0).and_then(|x| x.attributes.as_ref())
1653
- {
1654
- Ok(&wes.original_execution_run_id)
1655
- } else {
1656
- bail!("First event is not WorkflowExecutionStarted?!?")
1657
- }
1729
+ extract_original_run_id_from_events(&self.events)
1658
1730
  }
1659
1731
 
1660
1732
  /// Returns the event id of the final event in the history. Will return 0 if
@@ -1664,6 +1736,18 @@ pub mod temporal {
1664
1736
  }
1665
1737
  }
1666
1738
 
1739
+ pub fn extract_original_run_id_from_events(
1740
+ events: &[HistoryEvent],
1741
+ ) -> Result<&str, anyhow::Error> {
1742
+ if let Some(Attributes::WorkflowExecutionStartedEventAttributes(wes)) =
1743
+ events.get(0).and_then(|x| x.attributes.as_ref())
1744
+ {
1745
+ Ok(&wes.original_execution_run_id)
1746
+ } else {
1747
+ bail!("First event is not WorkflowExecutionStarted?!?")
1748
+ }
1749
+ }
1750
+
1667
1751
  impl HistoryEvent {
1668
1752
  /// Returns true if this is an event created to mirror a command
1669
1753
  pub fn is_command_event(&self) -> bool {
@@ -1677,6 +1761,7 @@ pub mod temporal {
1677
1761
  | EventType::TimerCanceled
1678
1762
  | EventType::TimerStarted
1679
1763
  | EventType::UpsertWorkflowSearchAttributes
1764
+ | EventType::WorkflowPropertiesModified
1680
1765
  | EventType::WorkflowExecutionCanceled
1681
1766
  | EventType::WorkflowExecutionCompleted
1682
1767
  | EventType::WorkflowExecutionContinuedAsNew
@@ -1735,6 +1820,15 @@ pub mod temporal {
1735
1820
  _ => false,
1736
1821
  }
1737
1822
  }
1823
+
1824
+ pub fn is_wft_closed_event(&self) -> bool {
1825
+ match self.event_type() {
1826
+ EventType::WorkflowTaskCompleted => true,
1827
+ EventType::WorkflowTaskFailed => true,
1828
+ EventType::WorkflowTaskTimedOut => true,
1829
+ _ => false,
1830
+ }
1831
+ }
1738
1832
  }
1739
1833
 
1740
1834
  impl Display for HistoryEvent {
@@ -1747,6 +1841,60 @@ pub mod temporal {
1747
1841
  )
1748
1842
  }
1749
1843
  }
1844
+
1845
+ impl Attributes {
1846
+ pub fn event_type(&self) -> EventType {
1847
+ // I just absolutely _love_ this
1848
+ match self {
1849
+ Attributes::WorkflowExecutionStartedEventAttributes(_) => {EventType::WorkflowExecutionStarted}
1850
+ Attributes::WorkflowExecutionCompletedEventAttributes(_) => {EventType::WorkflowExecutionCompleted}
1851
+ Attributes::WorkflowExecutionFailedEventAttributes(_) => {EventType::WorkflowExecutionFailed}
1852
+ Attributes::WorkflowExecutionTimedOutEventAttributes(_) => {EventType::WorkflowExecutionTimedOut}
1853
+ Attributes::WorkflowTaskScheduledEventAttributes(_) => {EventType::WorkflowTaskScheduled}
1854
+ Attributes::WorkflowTaskStartedEventAttributes(_) => {EventType::WorkflowTaskStarted}
1855
+ Attributes::WorkflowTaskCompletedEventAttributes(_) => {EventType::WorkflowTaskCompleted}
1856
+ Attributes::WorkflowTaskTimedOutEventAttributes(_) => {EventType::WorkflowTaskTimedOut}
1857
+ Attributes::WorkflowTaskFailedEventAttributes(_) => {EventType::WorkflowTaskFailed}
1858
+ Attributes::ActivityTaskScheduledEventAttributes(_) => {EventType::ActivityTaskScheduled}
1859
+ Attributes::ActivityTaskStartedEventAttributes(_) => {EventType::ActivityTaskStarted}
1860
+ Attributes::ActivityTaskCompletedEventAttributes(_) => {EventType::ActivityTaskCompleted}
1861
+ Attributes::ActivityTaskFailedEventAttributes(_) => {EventType::ActivityTaskFailed}
1862
+ Attributes::ActivityTaskTimedOutEventAttributes(_) => {EventType::ActivityTaskTimedOut}
1863
+ Attributes::TimerStartedEventAttributes(_) => {EventType::TimerStarted}
1864
+ Attributes::TimerFiredEventAttributes(_) => {EventType::TimerFired}
1865
+ Attributes::ActivityTaskCancelRequestedEventAttributes(_) => {EventType::ActivityTaskCancelRequested}
1866
+ Attributes::ActivityTaskCanceledEventAttributes(_) => {EventType::ActivityTaskCanceled}
1867
+ Attributes::TimerCanceledEventAttributes(_) => {EventType::TimerCanceled}
1868
+ Attributes::MarkerRecordedEventAttributes(_) => {EventType::MarkerRecorded}
1869
+ Attributes::WorkflowExecutionSignaledEventAttributes(_) => {EventType::WorkflowExecutionSignaled}
1870
+ Attributes::WorkflowExecutionTerminatedEventAttributes(_) => {EventType::WorkflowExecutionTerminated}
1871
+ Attributes::WorkflowExecutionCancelRequestedEventAttributes(_) => {EventType::WorkflowExecutionCancelRequested}
1872
+ Attributes::WorkflowExecutionCanceledEventAttributes(_) => {EventType::WorkflowExecutionCanceled}
1873
+ Attributes::RequestCancelExternalWorkflowExecutionInitiatedEventAttributes(_) => {EventType::RequestCancelExternalWorkflowExecutionInitiated}
1874
+ Attributes::RequestCancelExternalWorkflowExecutionFailedEventAttributes(_) => {EventType::RequestCancelExternalWorkflowExecutionFailed}
1875
+ Attributes::ExternalWorkflowExecutionCancelRequestedEventAttributes(_) => {EventType::ExternalWorkflowExecutionCancelRequested}
1876
+ Attributes::WorkflowExecutionContinuedAsNewEventAttributes(_) => {EventType::WorkflowExecutionContinuedAsNew}
1877
+ Attributes::StartChildWorkflowExecutionInitiatedEventAttributes(_) => {EventType::StartChildWorkflowExecutionInitiated}
1878
+ Attributes::StartChildWorkflowExecutionFailedEventAttributes(_) => {EventType::StartChildWorkflowExecutionFailed}
1879
+ Attributes::ChildWorkflowExecutionStartedEventAttributes(_) => {EventType::ChildWorkflowExecutionStarted}
1880
+ Attributes::ChildWorkflowExecutionCompletedEventAttributes(_) => {EventType::ChildWorkflowExecutionCompleted}
1881
+ Attributes::ChildWorkflowExecutionFailedEventAttributes(_) => {EventType::ChildWorkflowExecutionFailed}
1882
+ Attributes::ChildWorkflowExecutionCanceledEventAttributes(_) => {EventType::ChildWorkflowExecutionCanceled}
1883
+ Attributes::ChildWorkflowExecutionTimedOutEventAttributes(_) => {EventType::ChildWorkflowExecutionTimedOut}
1884
+ Attributes::ChildWorkflowExecutionTerminatedEventAttributes(_) => {EventType::ChildWorkflowExecutionTerminated}
1885
+ Attributes::SignalExternalWorkflowExecutionInitiatedEventAttributes(_) => {EventType::SignalExternalWorkflowExecutionInitiated}
1886
+ Attributes::SignalExternalWorkflowExecutionFailedEventAttributes(_) => {EventType::SignalExternalWorkflowExecutionFailed}
1887
+ Attributes::ExternalWorkflowExecutionSignaledEventAttributes(_) => {EventType::ExternalWorkflowExecutionSignaled}
1888
+ Attributes::UpsertWorkflowSearchAttributesEventAttributes(_) => {EventType::UpsertWorkflowSearchAttributes}
1889
+ Attributes::WorkflowExecutionUpdateRejectedEventAttributes(_) => {EventType::WorkflowExecutionUpdateRejected}
1890
+ Attributes::WorkflowExecutionUpdateAcceptedEventAttributes(_) => {EventType::WorkflowExecutionUpdateAccepted}
1891
+ Attributes::WorkflowExecutionUpdateCompletedEventAttributes(_) => {EventType::WorkflowExecutionUpdateCompleted}
1892
+ Attributes::WorkflowPropertiesModifiedExternallyEventAttributes(_) => {EventType::WorkflowPropertiesModifiedExternally}
1893
+ Attributes::ActivityPropertiesModifiedExternallyEventAttributes(_) => {EventType::ActivityPropertiesModifiedExternally}
1894
+ Attributes::WorkflowPropertiesModifiedEventAttributes(_) => {EventType::WorkflowPropertiesModified}
1895
+ }
1896
+ }
1897
+ }
1750
1898
  }
1751
1899
  }
1752
1900
  pub mod namespace {
@@ -1759,6 +1907,11 @@ pub mod temporal {
1759
1907
  tonic::include_proto!("temporal.api.operatorservice.v1");
1760
1908
  }
1761
1909
  }
1910
+ pub mod protocol {
1911
+ pub mod v1 {
1912
+ tonic::include_proto!("temporal.api.protocol.v1");
1913
+ }
1914
+ }
1762
1915
  pub mod query {
1763
1916
  pub mod v1 {
1764
1917
  tonic::include_proto!("temporal.api.query.v1");
@@ -1774,6 +1927,11 @@ pub mod temporal {
1774
1927
  tonic::include_proto!("temporal.api.schedule.v1");
1775
1928
  }
1776
1929
  }
1930
+ pub mod sdk {
1931
+ pub mod v1 {
1932
+ tonic::include_proto!("temporal.api.sdk.v1");
1933
+ }
1934
+ }
1777
1935
  pub mod taskqueue {
1778
1936
  pub mod v1 {
1779
1937
  use crate::temporal::api::enums::v1::TaskQueueKind;
@@ -1820,12 +1978,12 @@ pub mod temporal {
1820
1978
  tonic::include_proto!("temporal.api.workflowservice.v1");
1821
1979
 
1822
1980
  macro_rules! sched_to_start_impl {
1823
- () => {
1824
- /// Return the duration of the task schedule time to its start time if both
1825
- /// are set and time went forward.
1981
+ ($sched_field:ident) => {
1982
+ /// Return the duration of the task schedule time (current attempt) to its
1983
+ /// start time if both are set and time went forward.
1826
1984
  pub fn sched_to_start(&self) -> Option<Duration> {
1827
1985
  if let Some((sch, st)) =
1828
- self.scheduled_time.clone().zip(self.started_time.clone())
1986
+ self.$sched_field.clone().zip(self.started_time.clone())
1829
1987
  {
1830
1988
  let sch: Result<SystemTime, _> = sch.try_into();
1831
1989
  let st: Result<SystemTime, _> = st.try_into();
@@ -1839,7 +1997,7 @@ pub mod temporal {
1839
1997
  }
1840
1998
 
1841
1999
  impl PollWorkflowTaskQueueResponse {
1842
- sched_to_start_impl!();
2000
+ sched_to_start_impl!(scheduled_time);
1843
2001
  }
1844
2002
 
1845
2003
  impl Display for PollWorkflowTaskQueueResponse {
@@ -1881,7 +2039,7 @@ pub mod temporal {
1881
2039
  }
1882
2040
 
1883
2041
  impl PollActivityTaskQueueResponse {
1884
- sched_to_start_impl!();
2042
+ sched_to_start_impl!(current_attempt_scheduled_time);
1885
2043
  }
1886
2044
 
1887
2045
  impl QueryWorkflowResponse {
@@ -1908,3 +2066,23 @@ pub mod grpc {
1908
2066
  }
1909
2067
  }
1910
2068
  }
2069
+
2070
+ #[cfg(test)]
2071
+ mod tests {
2072
+ use crate::temporal::api::failure::v1::Failure;
2073
+ use anyhow::anyhow;
2074
+
2075
+ #[test]
2076
+ fn anyhow_to_failure_conversion() {
2077
+ let no_causes: Failure = anyhow!("no causes").into();
2078
+ assert_eq!(no_causes.cause, None);
2079
+ assert_eq!(no_causes.message, "no causes");
2080
+ let orig = anyhow!("fail 1");
2081
+ let mid = orig.context("fail 2");
2082
+ let top = mid.context("fail 3");
2083
+ let as_fail: Failure = top.into();
2084
+ assert_eq!(as_fail.message, "fail 3");
2085
+ assert_eq!(as_fail.cause.as_ref().unwrap().message, "fail 2");
2086
+ assert_eq!(as_fail.cause.unwrap().cause.unwrap().message, "fail 1");
2087
+ }
2088
+ }
@@ -1,8 +1,18 @@
1
+ use base64::{prelude::BASE64_STANDARD, Engine};
1
2
  use std::fmt::{Debug, Display, Formatter};
2
3
 
3
4
  static LOCAL_ACT_TASK_TOKEN_PREFIX: &[u8] = b"local_act_";
4
5
 
5
- #[derive(Hash, Eq, PartialEq, Clone, derive_more::From, derive_more::Into)]
6
+ #[derive(
7
+ Hash,
8
+ Eq,
9
+ PartialEq,
10
+ Clone,
11
+ derive_more::From,
12
+ derive_more::Into,
13
+ serde::Serialize,
14
+ serde::Deserialize,
15
+ )]
6
16
  /// Type-safe wrapper for task token bytes
7
17
  pub struct TaskToken(pub Vec<u8>);
8
18
 
@@ -34,5 +44,5 @@ impl Debug for TaskToken {
34
44
  }
35
45
 
36
46
  pub fn fmt_tt(tt: &[u8]) -> String {
37
- base64::encode(tt)
47
+ BASE64_STANDARD.encode(tt)
38
48
  }