@temporalio/core-bridge 1.13.1 → 1.14.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 (422) hide show
  1. package/Cargo.lock +350 -436
  2. package/Cargo.toml +14 -13
  3. package/{sdk-core/fsm/rustfsm_procmacro/LICENSE.txt → LICENSE} +5 -5
  4. package/README.md +0 -1
  5. package/bridge-macros/Cargo.toml +16 -0
  6. package/bridge-macros/src/derive_js_function.rs +126 -0
  7. package/bridge-macros/src/derive_tryfromjs.rs +138 -0
  8. package/bridge-macros/src/derive_tryintojs.rs +151 -0
  9. package/bridge-macros/src/lib.rs +42 -0
  10. package/lib/native.d.ts +23 -9
  11. package/package.json +6 -5
  12. package/releases/aarch64-apple-darwin/index.node +0 -0
  13. package/releases/aarch64-unknown-linux-gnu/index.node +0 -0
  14. package/releases/x86_64-apple-darwin/index.node +0 -0
  15. package/releases/x86_64-pc-windows-msvc/index.node +0 -0
  16. package/releases/x86_64-unknown-linux-gnu/index.node +0 -0
  17. package/sdk-core/.cargo/config.toml +78 -12
  18. package/sdk-core/.clippy.toml +1 -0
  19. package/sdk-core/.github/workflows/heavy.yml +2 -0
  20. package/sdk-core/.github/workflows/per-pr.yml +90 -21
  21. package/sdk-core/AGENTS.md +17 -19
  22. package/sdk-core/ARCHITECTURE.md +44 -48
  23. package/sdk-core/Cargo.toml +25 -7
  24. package/sdk-core/README.md +16 -15
  25. package/sdk-core/arch_docs/diagrams/TimerMachine_Coverage.puml +14 -0
  26. package/sdk-core/arch_docs/diagrams/deps.svg +102 -0
  27. package/sdk-core/arch_docs/diagrams/initial_event_history.png +0 -0
  28. package/sdk-core/arch_docs/sdks_intro.md +299 -0
  29. package/sdk-core/{client → crates/client}/Cargo.toml +15 -16
  30. package/sdk-core/{client → crates/client}/src/callback_based.rs +1 -2
  31. package/sdk-core/{client → crates/client}/src/lib.rs +594 -457
  32. package/sdk-core/{client → crates/client}/src/metrics.rs +32 -8
  33. package/sdk-core/crates/client/src/proxy.rs +209 -0
  34. package/sdk-core/{client → crates/client}/src/raw.rs +648 -328
  35. package/sdk-core/crates/client/src/replaceable.rs +253 -0
  36. package/sdk-core/crates/client/src/request_extensions.rs +40 -0
  37. package/sdk-core/{client → crates/client}/src/retry.rs +32 -22
  38. package/sdk-core/crates/client/src/worker/mod.rs +1468 -0
  39. package/sdk-core/{client → crates/client}/src/workflow_handle/mod.rs +24 -21
  40. package/sdk-core/{core-api → crates/common}/Cargo.toml +21 -12
  41. package/sdk-core/{sdk-core-protos → crates/common}/build.rs +10 -23
  42. package/sdk-core/crates/common/protos/api_cloud_upstream/VERSION +1 -0
  43. package/sdk-core/{sdk-core-protos → crates/common}/protos/api_cloud_upstream/temporal/api/cloud/account/v1/message.proto +18 -0
  44. package/sdk-core/{sdk-core-protos → crates/common}/protos/api_cloud_upstream/temporal/api/cloud/cloudservice/v1/request_response.proto +38 -11
  45. package/sdk-core/{sdk-core-protos → crates/common}/protos/api_cloud_upstream/temporal/api/cloud/cloudservice/v1/service.proto +21 -4
  46. package/sdk-core/{sdk-core-protos → crates/common}/protos/api_cloud_upstream/temporal/api/cloud/operation/v1/message.proto +6 -6
  47. package/sdk-core/{sdk-core-protos → crates/common}/protos/api_cloud_upstream/temporal/api/cloud/sink/v1/message.proto +22 -0
  48. package/sdk-core/{sdk-core-protos → crates/common}/protos/api_upstream/.github/workflows/create-release.yml +13 -0
  49. package/sdk-core/{sdk-core-protos → crates/common}/protos/api_upstream/openapi/openapiv2.json +254 -5
  50. package/sdk-core/{sdk-core-protos → crates/common}/protos/api_upstream/openapi/openapiv3.yaml +234 -5
  51. package/sdk-core/{sdk-core-protos → crates/common}/protos/api_upstream/temporal/api/common/v1/message.proto +1 -1
  52. package/sdk-core/{sdk-core-protos → crates/common}/protos/api_upstream/temporal/api/deployment/v1/message.proto +6 -0
  53. package/sdk-core/{sdk-core-protos → crates/common}/protos/api_upstream/temporal/api/namespace/v1/message.proto +6 -2
  54. package/sdk-core/{sdk-core-protos → crates/common}/protos/api_upstream/temporal/api/workflowservice/v1/request_response.proto +60 -2
  55. package/sdk-core/{sdk-core-protos → crates/common}/protos/api_upstream/temporal/api/workflowservice/v1/service.proto +30 -6
  56. package/sdk-core/{sdk-core-protos → crates/common}/protos/local/temporal/sdk/core/workflow_activation/workflow_activation.proto +2 -0
  57. package/sdk-core/{core-api → crates/common}/src/envconfig.rs +155 -56
  58. package/sdk-core/{core-api → crates/common}/src/errors.rs +8 -1
  59. package/sdk-core/{fsm/rustfsm_trait/src/lib.rs → crates/common/src/fsm_trait.rs} +1 -27
  60. package/sdk-core/{core-api → crates/common}/src/lib.rs +92 -9
  61. package/sdk-core/{test-utils/src → crates/common/src/protos}/canned_histories.rs +5 -5
  62. package/sdk-core/{sdk-core-protos/src → crates/common/src/protos}/history_builder.rs +3 -3
  63. package/sdk-core/{sdk-core-protos/src → crates/common/src/protos}/history_info.rs +2 -2
  64. package/sdk-core/{sdk-core-protos/src/lib.rs → crates/common/src/protos/mod.rs} +43 -26
  65. package/sdk-core/crates/common/src/protos/test_utils.rs +89 -0
  66. package/sdk-core/{sdk-core-protos/src → crates/common/src/protos}/utilities.rs +14 -5
  67. package/sdk-core/{core-api → crates/common}/src/telemetry/metrics.rs +449 -51
  68. package/sdk-core/{core-api → crates/common}/src/telemetry.rs +16 -1
  69. package/sdk-core/{core-api → crates/common}/src/worker.rs +112 -18
  70. package/sdk-core/crates/common/tests/worker_task_types_test.rs +129 -0
  71. package/sdk-core/crates/macros/Cargo.toml +23 -0
  72. package/sdk-core/{fsm/rustfsm_procmacro → crates/macros}/src/lib.rs +12 -12
  73. package/sdk-core/{sdk → crates/sdk}/Cargo.toml +18 -12
  74. package/sdk-core/{sdk → crates/sdk}/src/activity_context.rs +9 -7
  75. package/sdk-core/{sdk → crates/sdk}/src/app_data.rs +1 -1
  76. package/sdk-core/{sdk → crates/sdk}/src/interceptors.rs +2 -5
  77. package/sdk-core/{sdk → crates/sdk}/src/lib.rs +43 -42
  78. package/sdk-core/{sdk → crates/sdk}/src/workflow_context/options.rs +12 -3
  79. package/sdk-core/{sdk → crates/sdk}/src/workflow_context.rs +21 -19
  80. package/sdk-core/{sdk → crates/sdk}/src/workflow_future.rs +2 -2
  81. package/sdk-core/crates/sdk-core/Cargo.toml +222 -0
  82. package/sdk-core/{core/benches/workflow_replay.rs → crates/sdk-core/benches/workflow_replay_bench.rs} +15 -10
  83. package/sdk-core/crates/sdk-core/machine_coverage/ActivityMachine_Coverage.puml +32 -0
  84. package/sdk-core/crates/sdk-core/machine_coverage/CancelExternalMachine_Coverage.puml +9 -0
  85. package/sdk-core/crates/sdk-core/machine_coverage/CancelWorkflowMachine_Coverage.puml +6 -0
  86. package/sdk-core/crates/sdk-core/machine_coverage/ChildWorkflowMachine_Coverage.puml +27 -0
  87. package/sdk-core/crates/sdk-core/machine_coverage/CompleteWorkflowMachine_Coverage.puml +6 -0
  88. package/sdk-core/crates/sdk-core/machine_coverage/ContinueAsNewWorkflowMachine_Coverage.puml +6 -0
  89. package/sdk-core/crates/sdk-core/machine_coverage/FailWorkflowMachine_Coverage.puml +6 -0
  90. package/sdk-core/crates/sdk-core/machine_coverage/LocalActivityMachine_Coverage.puml +23 -0
  91. package/sdk-core/crates/sdk-core/machine_coverage/ModifyWorkflowPropertiesMachine_Coverage.puml +5 -0
  92. package/sdk-core/crates/sdk-core/machine_coverage/PatchMachine_Coverage.puml +8 -0
  93. package/sdk-core/crates/sdk-core/machine_coverage/SignalExternalMachine_Coverage.puml +12 -0
  94. package/sdk-core/crates/sdk-core/machine_coverage/TimerMachine_Coverage.puml +13 -0
  95. package/sdk-core/crates/sdk-core/machine_coverage/UpdateMachine_Coverage.puml +19 -0
  96. package/sdk-core/crates/sdk-core/machine_coverage/UpsertSearchAttributesMachine_Coverage.puml +5 -0
  97. package/sdk-core/crates/sdk-core/machine_coverage/WorkflowTaskMachine_Coverage.puml +11 -0
  98. package/sdk-core/{core → crates/sdk-core}/src/abstractions.rs +62 -6
  99. package/sdk-core/crates/sdk-core/src/antithesis.rs +60 -0
  100. package/sdk-core/{core → crates/sdk-core}/src/core_tests/activity_tasks.rs +85 -250
  101. package/sdk-core/{core → crates/sdk-core}/src/core_tests/mod.rs +13 -16
  102. package/sdk-core/{core → crates/sdk-core}/src/core_tests/queries.rs +25 -24
  103. package/sdk-core/{core → crates/sdk-core}/src/core_tests/replay_flag.rs +11 -68
  104. package/sdk-core/{core → crates/sdk-core}/src/core_tests/updates.rs +21 -20
  105. package/sdk-core/{core → crates/sdk-core}/src/core_tests/workers.rs +242 -16
  106. package/sdk-core/{core → crates/sdk-core}/src/core_tests/workflow_cancels.rs +10 -7
  107. package/sdk-core/{core → crates/sdk-core}/src/core_tests/workflow_tasks.rs +150 -326
  108. package/sdk-core/{core → crates/sdk-core}/src/debug_client.rs +1 -1
  109. package/sdk-core/{core → crates/sdk-core}/src/ephemeral_server/mod.rs +18 -6
  110. package/sdk-core/{test-utils → crates/sdk-core}/src/histfetch.rs +9 -4
  111. package/sdk-core/{core → crates/sdk-core}/src/internal_flags.rs +15 -4
  112. package/sdk-core/{core → crates/sdk-core}/src/lib.rs +128 -72
  113. package/sdk-core/{core → crates/sdk-core}/src/pollers/mod.rs +13 -11
  114. package/sdk-core/{core → crates/sdk-core}/src/pollers/poll_buffer.rs +53 -18
  115. package/sdk-core/{core → crates/sdk-core}/src/protosext/mod.rs +14 -6
  116. package/sdk-core/{core → crates/sdk-core}/src/protosext/protocol_messages.rs +5 -12
  117. package/sdk-core/{core → crates/sdk-core}/src/replay/mod.rs +14 -11
  118. package/sdk-core/crates/sdk-core/src/retry_logic.rs +390 -0
  119. package/sdk-core/{core → crates/sdk-core}/src/telemetry/log_export.rs +2 -2
  120. package/sdk-core/{core → crates/sdk-core}/src/telemetry/metrics.rs +80 -33
  121. package/sdk-core/{core → crates/sdk-core}/src/telemetry/mod.rs +12 -6
  122. package/sdk-core/{core → crates/sdk-core}/src/telemetry/otel.rs +1 -1
  123. package/sdk-core/{core → crates/sdk-core}/src/telemetry/prometheus_meter.rs +14 -14
  124. package/sdk-core/{core → crates/sdk-core}/src/telemetry/prometheus_server.rs +2 -2
  125. package/sdk-core/{core/src/test_help/mod.rs → crates/sdk-core/src/test_help/integ_helpers.rs} +284 -329
  126. package/sdk-core/crates/sdk-core/src/test_help/mod.rs +13 -0
  127. package/sdk-core/crates/sdk-core/src/test_help/unit_helpers.rs +220 -0
  128. package/sdk-core/{core → crates/sdk-core}/src/worker/activities/activity_heartbeat_manager.rs +44 -8
  129. package/sdk-core/{core → crates/sdk-core}/src/worker/activities/local_activities.rs +33 -31
  130. package/sdk-core/{core → crates/sdk-core}/src/worker/activities.rs +31 -15
  131. package/sdk-core/{core → crates/sdk-core}/src/worker/client/mocks.rs +28 -15
  132. package/sdk-core/{core → crates/sdk-core}/src/worker/client.rs +275 -145
  133. package/sdk-core/crates/sdk-core/src/worker/heartbeat.rs +246 -0
  134. package/sdk-core/crates/sdk-core/src/worker/mod.rs +1462 -0
  135. package/sdk-core/{core → crates/sdk-core}/src/worker/nexus.rs +24 -12
  136. package/sdk-core/{core → crates/sdk-core}/src/worker/slot_provider.rs +18 -10
  137. package/sdk-core/{core → crates/sdk-core}/src/worker/tuner/fixed_size.rs +5 -1
  138. package/sdk-core/{core → crates/sdk-core}/src/worker/tuner/resource_based.rs +453 -57
  139. package/sdk-core/{core → crates/sdk-core}/src/worker/tuner.rs +179 -3
  140. package/sdk-core/{core → crates/sdk-core}/src/worker/workflow/driven_workflow.rs +1 -1
  141. package/sdk-core/{core → crates/sdk-core}/src/worker/workflow/history_update.rs +5 -267
  142. package/sdk-core/{core → crates/sdk-core}/src/worker/workflow/machines/activity_state_machine.rs +147 -90
  143. package/sdk-core/{core → crates/sdk-core}/src/worker/workflow/machines/cancel_external_state_machine.rs +8 -91
  144. package/sdk-core/{core → crates/sdk-core}/src/worker/workflow/machines/cancel_nexus_op_state_machine.rs +14 -12
  145. package/sdk-core/crates/sdk-core/src/worker/workflow/machines/cancel_workflow_state_machine.rs +97 -0
  146. package/sdk-core/{core → crates/sdk-core}/src/worker/workflow/machines/child_workflow_state_machine.rs +32 -229
  147. package/sdk-core/{core → crates/sdk-core}/src/worker/workflow/machines/complete_workflow_state_machine.rs +13 -8
  148. package/sdk-core/{core → crates/sdk-core}/src/worker/workflow/machines/continue_as_new_workflow_state_machine.rs +6 -50
  149. package/sdk-core/{core → crates/sdk-core}/src/worker/workflow/machines/fail_workflow_state_machine.rs +6 -7
  150. package/sdk-core/{core → crates/sdk-core}/src/worker/workflow/machines/local_activity_state_machine.rs +39 -584
  151. package/sdk-core/{core → crates/sdk-core}/src/worker/workflow/machines/mod.rs +22 -17
  152. package/sdk-core/{core → crates/sdk-core}/src/worker/workflow/machines/modify_workflow_properties_state_machine.rs +4 -74
  153. package/sdk-core/{core → crates/sdk-core}/src/worker/workflow/machines/nexus_operation_state_machine.rs +118 -21
  154. package/sdk-core/crates/sdk-core/src/worker/workflow/machines/patch_state_machine.rs +273 -0
  155. package/sdk-core/{core → crates/sdk-core}/src/worker/workflow/machines/signal_external_state_machine.rs +9 -151
  156. package/sdk-core/{core → crates/sdk-core}/src/worker/workflow/machines/timer_state_machine.rs +27 -132
  157. package/sdk-core/{core → crates/sdk-core}/src/worker/workflow/machines/transition_coverage.rs +1 -2
  158. package/sdk-core/{core → crates/sdk-core}/src/worker/workflow/machines/update_state_machine.rs +19 -13
  159. package/sdk-core/{core → crates/sdk-core}/src/worker/workflow/machines/upsert_search_attributes_state_machine.rs +25 -80
  160. package/sdk-core/{core → crates/sdk-core}/src/worker/workflow/machines/workflow_machines/local_acts.rs +1 -1
  161. package/sdk-core/{core → crates/sdk-core}/src/worker/workflow/machines/workflow_machines.rs +68 -72
  162. package/sdk-core/{core → crates/sdk-core}/src/worker/workflow/machines/workflow_task_state_machine.rs +13 -15
  163. package/sdk-core/{core → crates/sdk-core}/src/worker/workflow/managed_run.rs +55 -37
  164. package/sdk-core/{core → crates/sdk-core}/src/worker/workflow/mod.rs +171 -61
  165. package/sdk-core/{core → crates/sdk-core}/src/worker/workflow/run_cache.rs +10 -7
  166. package/sdk-core/{core → crates/sdk-core}/src/worker/workflow/wft_extraction.rs +4 -2
  167. package/sdk-core/{core → crates/sdk-core}/src/worker/workflow/wft_poller.rs +15 -4
  168. package/sdk-core/{core → crates/sdk-core}/src/worker/workflow/workflow_stream.rs +38 -19
  169. package/sdk-core/crates/sdk-core/tests/c_bridge_smoke_test.c +10 -0
  170. package/sdk-core/crates/sdk-core/tests/cloud_tests.rs +25 -0
  171. package/sdk-core/crates/sdk-core/tests/common/fake_grpc_server.rs +106 -0
  172. package/sdk-core/crates/sdk-core/tests/common/http_proxy.rs +134 -0
  173. package/sdk-core/{test-utils/src/lib.rs → crates/sdk-core/tests/common/mod.rs} +286 -334
  174. package/sdk-core/{test-utils/src → crates/sdk-core/tests/common}/workflows.rs +6 -4
  175. package/sdk-core/crates/sdk-core/tests/fsm_procmacro.rs +6 -0
  176. package/sdk-core/{fsm/rustfsm_procmacro/tests/trybuild → crates/sdk-core/tests/fsm_trybuild}/dupe_transitions_fail.rs +1 -3
  177. package/sdk-core/crates/sdk-core/tests/fsm_trybuild/dupe_transitions_fail.stderr +12 -0
  178. package/sdk-core/{fsm/rustfsm_procmacro/tests/trybuild → crates/sdk-core/tests/fsm_trybuild}/dynamic_dest_pass.rs +2 -4
  179. package/sdk-core/{fsm/rustfsm_procmacro/tests/trybuild → crates/sdk-core/tests/fsm_trybuild}/forgot_name_fail.rs +1 -3
  180. package/sdk-core/{fsm/rustfsm_procmacro/tests/trybuild → crates/sdk-core/tests/fsm_trybuild}/forgot_name_fail.stderr +4 -4
  181. package/sdk-core/{fsm/rustfsm_procmacro/tests/trybuild → crates/sdk-core/tests/fsm_trybuild}/handler_arg_pass.rs +2 -4
  182. package/sdk-core/{fsm/rustfsm_procmacro/tests/trybuild → crates/sdk-core/tests/fsm_trybuild}/handler_pass.rs +2 -4
  183. package/sdk-core/{fsm/rustfsm_procmacro/tests/trybuild → crates/sdk-core/tests/fsm_trybuild}/medium_complex_pass.rs +2 -4
  184. package/sdk-core/{fsm/rustfsm_procmacro/tests/trybuild → crates/sdk-core/tests/fsm_trybuild}/no_handle_conversions_require_into_fail.rs +2 -4
  185. package/sdk-core/crates/sdk-core/tests/fsm_trybuild/no_handle_conversions_require_into_fail.stderr +15 -0
  186. package/sdk-core/{fsm/rustfsm_procmacro/tests/trybuild → crates/sdk-core/tests/fsm_trybuild}/simple_pass.rs +2 -4
  187. package/sdk-core/{fsm/rustfsm_procmacro/tests/trybuild → crates/sdk-core/tests/fsm_trybuild}/struct_event_variant_fail.rs +1 -3
  188. package/sdk-core/crates/sdk-core/tests/fsm_trybuild/struct_event_variant_fail.stderr +5 -0
  189. package/sdk-core/{fsm/rustfsm_procmacro/tests/trybuild → crates/sdk-core/tests/fsm_trybuild}/tuple_more_item_event_variant_fail.rs +1 -3
  190. package/sdk-core/crates/sdk-core/tests/fsm_trybuild/tuple_more_item_event_variant_fail.stderr +5 -0
  191. package/sdk-core/{fsm/rustfsm_procmacro/tests/trybuild → crates/sdk-core/tests/fsm_trybuild}/tuple_zero_item_event_variant_fail.rs +1 -3
  192. package/sdk-core/crates/sdk-core/tests/fsm_trybuild/tuple_zero_item_event_variant_fail.stderr +5 -0
  193. package/sdk-core/{tests → crates/sdk-core/tests}/global_metric_tests.rs +22 -22
  194. package/sdk-core/{tests → crates/sdk-core/tests/heavy_tests}/fuzzy_workflow.rs +4 -4
  195. package/sdk-core/{tests → crates/sdk-core/tests}/heavy_tests.rs +25 -14
  196. package/sdk-core/{tests → crates/sdk-core/tests}/integ_tests/activity_functions.rs +1 -1
  197. package/sdk-core/{tests → crates/sdk-core/tests}/integ_tests/client_tests.rs +115 -123
  198. package/sdk-core/{tests → crates/sdk-core/tests}/integ_tests/ephemeral_server_tests.rs +19 -15
  199. package/sdk-core/{tests → crates/sdk-core/tests}/integ_tests/heartbeat_tests.rs +24 -20
  200. package/sdk-core/{tests → crates/sdk-core/tests}/integ_tests/metrics_tests.rs +241 -67
  201. package/sdk-core/crates/sdk-core/tests/integ_tests/pagination_tests.rs +273 -0
  202. package/sdk-core/crates/sdk-core/tests/integ_tests/polling_tests.rs +513 -0
  203. package/sdk-core/{tests → crates/sdk-core/tests}/integ_tests/queries_tests.rs +13 -11
  204. package/sdk-core/{tests → crates/sdk-core/tests}/integ_tests/update_tests.rs +47 -29
  205. package/sdk-core/{tests → crates/sdk-core/tests}/integ_tests/visibility_tests.rs +49 -27
  206. package/sdk-core/crates/sdk-core/tests/integ_tests/worker_heartbeat_tests.rs +1061 -0
  207. package/sdk-core/crates/sdk-core/tests/integ_tests/worker_tests.rs +920 -0
  208. package/sdk-core/{tests → crates/sdk-core/tests}/integ_tests/worker_versioning_tests.rs +58 -40
  209. package/sdk-core/{tests → crates/sdk-core/tests}/integ_tests/workflow_tests/activities.rs +268 -30
  210. package/sdk-core/{tests → crates/sdk-core/tests}/integ_tests/workflow_tests/appdata_propagation.rs +4 -4
  211. package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_tests/cancel_external.rs +155 -0
  212. package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_tests/cancel_wf.rs +121 -0
  213. package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_tests/child_workflows.rs +717 -0
  214. package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_tests/continue_as_new.rs +109 -0
  215. package/sdk-core/{core/src/core_tests → crates/sdk-core/tests/integ_tests/workflow_tests}/determinism.rs +108 -20
  216. package/sdk-core/{tests → crates/sdk-core/tests}/integ_tests/workflow_tests/eager.rs +10 -5
  217. package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_tests/local_activities.rs +2884 -0
  218. package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_tests/modify_wf_properties.rs +119 -0
  219. package/sdk-core/{tests → crates/sdk-core/tests}/integ_tests/workflow_tests/nexus.rs +174 -46
  220. package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_tests/patches.rs +740 -0
  221. package/sdk-core/{tests → crates/sdk-core/tests}/integ_tests/workflow_tests/replay.rs +78 -27
  222. package/sdk-core/{tests → crates/sdk-core/tests}/integ_tests/workflow_tests/resets.rs +46 -28
  223. package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_tests/signals.rs +294 -0
  224. package/sdk-core/{tests → crates/sdk-core/tests}/integ_tests/workflow_tests/stickyness.rs +9 -8
  225. package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_tests/timers.rs +249 -0
  226. package/sdk-core/{tests → crates/sdk-core/tests}/integ_tests/workflow_tests/upsert_search_attrs.rs +72 -7
  227. package/sdk-core/{tests → crates/sdk-core/tests}/integ_tests/workflow_tests.rs +97 -33
  228. package/sdk-core/{tests → crates/sdk-core/tests}/main.rs +40 -25
  229. package/sdk-core/{tests → crates/sdk-core/tests}/manual_tests.rs +25 -15
  230. package/sdk-core/{tests → crates/sdk-core/tests}/runner.rs +23 -41
  231. package/sdk-core/{tests → crates/sdk-core/tests}/shared_tests/mod.rs +11 -6
  232. package/sdk-core/{tests → crates/sdk-core/tests}/shared_tests/priority.rs +6 -6
  233. package/sdk-core/crates/sdk-core-c-bridge/Cargo.toml +59 -0
  234. package/sdk-core/{core-c-bridge → crates/sdk-core-c-bridge}/include/temporal-sdk-core-c-bridge.h +215 -44
  235. package/sdk-core/{core-c-bridge → crates/sdk-core-c-bridge}/src/client.rs +515 -214
  236. package/sdk-core/crates/sdk-core-c-bridge/src/envconfig.rs +314 -0
  237. package/sdk-core/{core-c-bridge → crates/sdk-core-c-bridge}/src/lib.rs +2 -1
  238. package/sdk-core/{core-c-bridge → crates/sdk-core-c-bridge}/src/metric.rs +1 -1
  239. package/sdk-core/{core-c-bridge → crates/sdk-core-c-bridge}/src/random.rs +4 -4
  240. package/sdk-core/{core-c-bridge → crates/sdk-core-c-bridge}/src/runtime.rs +42 -28
  241. package/sdk-core/{core-c-bridge → crates/sdk-core-c-bridge}/src/testing.rs +2 -5
  242. package/sdk-core/{core-c-bridge → crates/sdk-core-c-bridge}/src/tests/context.rs +42 -41
  243. package/sdk-core/{core-c-bridge → crates/sdk-core-c-bridge}/src/tests/mod.rs +38 -34
  244. package/sdk-core/{core-c-bridge → crates/sdk-core-c-bridge}/src/tests/utils.rs +10 -11
  245. package/sdk-core/{core-c-bridge → crates/sdk-core-c-bridge}/src/worker.rs +427 -121
  246. package/sdk-core/docker-cgroup-tests.sh +24 -0
  247. package/sdk-core/{docker → etc/docker}/docker-compose-ci.yaml +9 -9
  248. package/sdk-core/{docker → etc/docker}/docker-compose-telem.yaml +11 -11
  249. package/sdk-core/{docker → etc/docker}/docker-compose.yaml +8 -8
  250. package/sdk-core/{integ-with-otel.sh → etc/integ-with-otel.sh} +1 -1
  251. package/sdk-core/etc/regen-depgraph.sh +2 -2
  252. package/src/client.rs +117 -49
  253. package/src/helpers/callbacks.rs +4 -4
  254. package/src/helpers/errors.rs +7 -1
  255. package/src/helpers/handles.rs +1 -0
  256. package/src/helpers/try_from_js.rs +5 -4
  257. package/src/lib.rs +3 -2
  258. package/src/logs.rs +1 -1
  259. package/src/metrics.rs +6 -3
  260. package/src/runtime.rs +41 -24
  261. package/src/testing.rs +3 -3
  262. package/src/worker.rs +77 -44
  263. package/ts/native.ts +26 -9
  264. package/LICENSE.md +0 -23
  265. package/sdk-core/arch_docs/diagrams/workflow_internals.svg +0 -1
  266. package/sdk-core/client/src/proxy.rs +0 -90
  267. package/sdk-core/client/src/worker_registry/mod.rs +0 -266
  268. package/sdk-core/core/Cargo.toml +0 -146
  269. package/sdk-core/core/src/core_tests/child_workflows.rs +0 -281
  270. package/sdk-core/core/src/core_tests/local_activities.rs +0 -1442
  271. package/sdk-core/core/src/retry_logic.rs +0 -224
  272. package/sdk-core/core/src/worker/heartbeat.rs +0 -231
  273. package/sdk-core/core/src/worker/mod.rs +0 -980
  274. package/sdk-core/core/src/worker/workflow/machines/cancel_workflow_state_machine.rs +0 -165
  275. package/sdk-core/core/src/worker/workflow/machines/patch_state_machine.rs +0 -801
  276. package/sdk-core/core-c-bridge/Cargo.toml +0 -51
  277. package/sdk-core/etc/deps.svg +0 -162
  278. package/sdk-core/fsm/Cargo.toml +0 -21
  279. package/sdk-core/fsm/README.md +0 -3
  280. package/sdk-core/fsm/rustfsm_procmacro/Cargo.toml +0 -27
  281. package/sdk-core/fsm/rustfsm_procmacro/tests/progress.rs +0 -8
  282. package/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/dupe_transitions_fail.stderr +0 -12
  283. package/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/no_handle_conversions_require_into_fail.stderr +0 -15
  284. package/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/struct_event_variant_fail.stderr +0 -5
  285. package/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/tuple_more_item_event_variant_fail.stderr +0 -5
  286. package/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/tuple_zero_item_event_variant_fail.stderr +0 -5
  287. package/sdk-core/fsm/rustfsm_trait/Cargo.toml +0 -14
  288. package/sdk-core/fsm/rustfsm_trait/LICENSE.txt +0 -21
  289. package/sdk-core/fsm/src/lib.rs +0 -2
  290. package/sdk-core/sdk-core-protos/Cargo.toml +0 -37
  291. package/sdk-core/sdk-core-protos/protos/api_cloud_upstream/VERSION +0 -1
  292. package/sdk-core/test-utils/Cargo.toml +0 -38
  293. package/sdk-core/test-utils/src/interceptors.rs +0 -46
  294. package/sdk-core/tests/cloud_tests.rs +0 -23
  295. package/sdk-core/tests/integ_tests/polling_tests.rs +0 -294
  296. package/sdk-core/tests/integ_tests/worker_tests.rs +0 -203
  297. package/sdk-core/tests/integ_tests/workflow_tests/cancel_external.rs +0 -74
  298. package/sdk-core/tests/integ_tests/workflow_tests/cancel_wf.rs +0 -57
  299. package/sdk-core/tests/integ_tests/workflow_tests/child_workflows.rs +0 -246
  300. package/sdk-core/tests/integ_tests/workflow_tests/continue_as_new.rs +0 -65
  301. package/sdk-core/tests/integ_tests/workflow_tests/determinism.rs +0 -85
  302. package/sdk-core/tests/integ_tests/workflow_tests/local_activities.rs +0 -908
  303. package/sdk-core/tests/integ_tests/workflow_tests/modify_wf_properties.rs +0 -51
  304. package/sdk-core/tests/integ_tests/workflow_tests/patches.rs +0 -206
  305. package/sdk-core/tests/integ_tests/workflow_tests/signals.rs +0 -164
  306. package/sdk-core/tests/integ_tests/workflow_tests/timers.rs +0 -123
  307. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_cloud_upstream/.github/workflows/build.yaml +0 -0
  308. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_cloud_upstream/.github/workflows/push-to-buf.yml +0 -0
  309. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_cloud_upstream/CODEOWNERS +0 -0
  310. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_cloud_upstream/LICENSE +0 -0
  311. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_cloud_upstream/Makefile +0 -0
  312. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_cloud_upstream/README.md +0 -0
  313. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_cloud_upstream/buf.gen.yaml +0 -0
  314. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_cloud_upstream/buf.lock +0 -0
  315. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_cloud_upstream/buf.yaml +0 -0
  316. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_cloud_upstream/temporal/api/cloud/connectivityrule/v1/message.proto +0 -0
  317. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_cloud_upstream/temporal/api/cloud/identity/v1/message.proto +0 -0
  318. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_cloud_upstream/temporal/api/cloud/namespace/v1/message.proto +0 -0
  319. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_cloud_upstream/temporal/api/cloud/nexus/v1/message.proto +0 -0
  320. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_cloud_upstream/temporal/api/cloud/region/v1/message.proto +0 -0
  321. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_cloud_upstream/temporal/api/cloud/resource/v1/message.proto +0 -0
  322. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_cloud_upstream/temporal/api/cloud/usage/v1/message.proto +0 -0
  323. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_upstream/.github/CODEOWNERS +0 -0
  324. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_upstream/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  325. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_upstream/.github/workflows/ci.yml +0 -0
  326. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_upstream/.github/workflows/publish-docs.yml +0 -0
  327. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_upstream/.github/workflows/push-to-buf.yml +0 -0
  328. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_upstream/.github/workflows/trigger-api-go-delete-release.yml +0 -0
  329. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_upstream/.github/workflows/trigger-api-go-publish-release.yml +0 -0
  330. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_upstream/.github/workflows/trigger-api-go-update.yml +0 -0
  331. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_upstream/LICENSE +0 -0
  332. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_upstream/Makefile +0 -0
  333. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_upstream/README.md +0 -0
  334. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_upstream/api-linter.yaml +0 -0
  335. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_upstream/buf.gen.yaml +0 -0
  336. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_upstream/buf.lock +0 -0
  337. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_upstream/buf.yaml +0 -0
  338. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_upstream/google/api/annotations.proto +0 -0
  339. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_upstream/google/api/http.proto +0 -0
  340. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_upstream/google/protobuf/any.proto +0 -0
  341. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_upstream/google/protobuf/descriptor.proto +0 -0
  342. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_upstream/google/protobuf/duration.proto +0 -0
  343. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_upstream/google/protobuf/empty.proto +0 -0
  344. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_upstream/google/protobuf/struct.proto +0 -0
  345. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_upstream/google/protobuf/timestamp.proto +0 -0
  346. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_upstream/google/protobuf/wrappers.proto +0 -0
  347. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_upstream/openapi/payload_description.txt +0 -0
  348. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_upstream/temporal/api/activity/v1/message.proto +0 -0
  349. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_upstream/temporal/api/batch/v1/message.proto +0 -0
  350. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_upstream/temporal/api/command/v1/message.proto +0 -0
  351. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_upstream/temporal/api/enums/v1/batch_operation.proto +0 -0
  352. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_upstream/temporal/api/enums/v1/command_type.proto +0 -0
  353. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_upstream/temporal/api/enums/v1/common.proto +0 -0
  354. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_upstream/temporal/api/enums/v1/deployment.proto +0 -0
  355. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_upstream/temporal/api/enums/v1/event_type.proto +0 -0
  356. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_upstream/temporal/api/enums/v1/failed_cause.proto +0 -0
  357. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_upstream/temporal/api/enums/v1/namespace.proto +0 -0
  358. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_upstream/temporal/api/enums/v1/nexus.proto +0 -0
  359. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_upstream/temporal/api/enums/v1/query.proto +0 -0
  360. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_upstream/temporal/api/enums/v1/reset.proto +0 -0
  361. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_upstream/temporal/api/enums/v1/schedule.proto +0 -0
  362. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_upstream/temporal/api/enums/v1/task_queue.proto +0 -0
  363. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_upstream/temporal/api/enums/v1/update.proto +0 -0
  364. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_upstream/temporal/api/enums/v1/workflow.proto +0 -0
  365. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_upstream/temporal/api/errordetails/v1/message.proto +0 -0
  366. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_upstream/temporal/api/export/v1/message.proto +0 -0
  367. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_upstream/temporal/api/failure/v1/message.proto +0 -0
  368. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_upstream/temporal/api/filter/v1/message.proto +0 -0
  369. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_upstream/temporal/api/history/v1/message.proto +0 -0
  370. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_upstream/temporal/api/nexus/v1/message.proto +0 -0
  371. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_upstream/temporal/api/operatorservice/v1/request_response.proto +0 -0
  372. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_upstream/temporal/api/operatorservice/v1/service.proto +0 -0
  373. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_upstream/temporal/api/protocol/v1/message.proto +0 -0
  374. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_upstream/temporal/api/query/v1/message.proto +0 -0
  375. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_upstream/temporal/api/replication/v1/message.proto +0 -0
  376. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_upstream/temporal/api/rules/v1/message.proto +0 -0
  377. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_upstream/temporal/api/schedule/v1/message.proto +0 -0
  378. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_upstream/temporal/api/sdk/v1/enhanced_stack_trace.proto +0 -0
  379. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_upstream/temporal/api/sdk/v1/task_complete_metadata.proto +0 -0
  380. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_upstream/temporal/api/sdk/v1/user_metadata.proto +0 -0
  381. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_upstream/temporal/api/sdk/v1/worker_config.proto +0 -0
  382. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_upstream/temporal/api/sdk/v1/workflow_metadata.proto +0 -0
  383. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_upstream/temporal/api/taskqueue/v1/message.proto +0 -0
  384. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_upstream/temporal/api/update/v1/message.proto +0 -0
  385. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_upstream/temporal/api/version/v1/message.proto +0 -0
  386. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_upstream/temporal/api/worker/v1/message.proto +0 -0
  387. /package/sdk-core/{sdk-core-protos → crates/common}/protos/api_upstream/temporal/api/workflow/v1/message.proto +0 -0
  388. /package/sdk-core/{sdk-core-protos → crates/common}/protos/google/rpc/status.proto +0 -0
  389. /package/sdk-core/{sdk-core-protos → crates/common}/protos/grpc/health/v1/health.proto +0 -0
  390. /package/sdk-core/{sdk-core-protos → crates/common}/protos/local/temporal/sdk/core/activity_result/activity_result.proto +0 -0
  391. /package/sdk-core/{sdk-core-protos → crates/common}/protos/local/temporal/sdk/core/activity_task/activity_task.proto +0 -0
  392. /package/sdk-core/{sdk-core-protos → crates/common}/protos/local/temporal/sdk/core/child_workflow/child_workflow.proto +0 -0
  393. /package/sdk-core/{sdk-core-protos → crates/common}/protos/local/temporal/sdk/core/common/common.proto +0 -0
  394. /package/sdk-core/{sdk-core-protos → crates/common}/protos/local/temporal/sdk/core/core_interface.proto +0 -0
  395. /package/sdk-core/{sdk-core-protos → crates/common}/protos/local/temporal/sdk/core/external_data/external_data.proto +0 -0
  396. /package/sdk-core/{sdk-core-protos → crates/common}/protos/local/temporal/sdk/core/nexus/nexus.proto +0 -0
  397. /package/sdk-core/{sdk-core-protos → crates/common}/protos/local/temporal/sdk/core/workflow_commands/workflow_commands.proto +0 -0
  398. /package/sdk-core/{sdk-core-protos → crates/common}/protos/local/temporal/sdk/core/workflow_completion/workflow_completion.proto +0 -0
  399. /package/sdk-core/{sdk-core-protos → crates/common}/protos/testsrv_upstream/Makefile +0 -0
  400. /package/sdk-core/{sdk-core-protos → crates/common}/protos/testsrv_upstream/api-linter.yaml +0 -0
  401. /package/sdk-core/{sdk-core-protos → crates/common}/protos/testsrv_upstream/buf.yaml +0 -0
  402. /package/sdk-core/{sdk-core-protos → crates/common}/protos/testsrv_upstream/temporal/api/testservice/v1/request_response.proto +0 -0
  403. /package/sdk-core/{sdk-core-protos → crates/common}/protos/testsrv_upstream/temporal/api/testservice/v1/service.proto +0 -0
  404. /package/sdk-core/{sdk-core-protos/src → crates/common/src/protos}/constants.rs +0 -0
  405. /package/sdk-core/{sdk-core-protos/src → crates/common/src/protos}/task_token.rs +0 -0
  406. /package/sdk-core/{fsm → crates/macros}/LICENSE.txt +0 -0
  407. /package/sdk-core/{core → crates/sdk-core}/src/abstractions/take_cell.rs +0 -0
  408. /package/sdk-core/{core → crates/sdk-core}/src/worker/slot_supplier.rs +0 -0
  409. /package/sdk-core/{histories → crates/sdk-core/tests/histories}/ends_empty_wft_complete.bin +0 -0
  410. /package/sdk-core/{histories → crates/sdk-core/tests/histories}/evict_while_la_running_no_interference-16_history.bin +0 -0
  411. /package/sdk-core/{histories → crates/sdk-core/tests/histories}/evict_while_la_running_no_interference-23_history.bin +0 -0
  412. /package/sdk-core/{histories → crates/sdk-core/tests/histories}/evict_while_la_running_no_interference-85_history.bin +0 -0
  413. /package/sdk-core/{histories → crates/sdk-core/tests/histories}/fail_wf_task.bin +0 -0
  414. /package/sdk-core/{histories → crates/sdk-core/tests/histories}/long_local_activity_with_update-0_history.bin +0 -0
  415. /package/sdk-core/{histories → crates/sdk-core/tests/histories}/long_local_activity_with_update-1_history.bin +0 -0
  416. /package/sdk-core/{histories → crates/sdk-core/tests/histories}/long_local_activity_with_update-2_history.bin +0 -0
  417. /package/sdk-core/{histories → crates/sdk-core/tests/histories}/long_local_activity_with_update-3_history.bin +0 -0
  418. /package/sdk-core/{histories → crates/sdk-core/tests/histories}/old_change_marker_format.bin +0 -0
  419. /package/sdk-core/{histories → crates/sdk-core/tests/histories}/timer_workflow_history.bin +0 -0
  420. /package/sdk-core/{tests → crates/sdk-core/tests}/integ_tests/workflow_tests/priority.rs +0 -0
  421. /package/sdk-core/{core-c-bridge → crates/sdk-core-c-bridge}/build.rs +0 -0
  422. /package/sdk-core/{cargo-tokio-console.sh → etc/cargo-tokio-console.sh} +0 -0
@@ -0,0 +1,314 @@
1
+ use crate::{ByteArray, ByteArrayRef};
2
+ use serde::Serialize;
3
+ use std::collections::HashMap;
4
+ use temporalio_common::envconfig::{
5
+ self, ClientConfig as CoreClientConfig, ClientConfigCodec as CoreClientConfigCodec,
6
+ ClientConfigProfile as CoreClientConfigProfile, ClientConfigTLS as CoreClientConfigTLS,
7
+ DataSource as CoreDataSource, LoadClientConfigOptions, LoadClientConfigProfileOptions,
8
+ };
9
+
10
+ /// OrFail result for client config loading operations.
11
+ /// Either success or fail will be null, but never both.
12
+ /// If success is not null, it contains JSON-serialized client configuration data.
13
+ /// If fail is not null, it contains UTF-8 encoded error message.
14
+ /// The returned ByteArrays must be freed by the caller.
15
+ #[repr(C)]
16
+ pub struct ClientEnvConfigOrFail {
17
+ pub success: *const ByteArray,
18
+ pub fail: *const ByteArray,
19
+ }
20
+
21
+ /// OrFail result for client config profile loading operations.
22
+ /// Either success or fail will be null, but never both.
23
+ /// If success is not null, it contains JSON-serialized client configuration profile data.
24
+ /// If fail is not null, it contains UTF-8 encoded error message.
25
+ /// The returned ByteArrays must be freed by the caller.
26
+ #[repr(C)]
27
+ pub struct ClientEnvConfigProfileOrFail {
28
+ pub success: *const ByteArray,
29
+ pub fail: *const ByteArray,
30
+ }
31
+
32
+ /// Options for loading client configuration.
33
+ #[repr(C)]
34
+ pub struct ClientEnvConfigLoadOptions {
35
+ pub path: ByteArrayRef,
36
+ pub data: ByteArrayRef,
37
+ pub config_file_strict: bool,
38
+ pub env_vars: ByteArrayRef,
39
+ }
40
+
41
+ /// Options for loading a specific client configuration profile.
42
+ #[repr(C)]
43
+ pub struct ClientEnvConfigProfileLoadOptions {
44
+ pub profile: ByteArrayRef,
45
+ pub path: ByteArrayRef,
46
+ pub data: ByteArrayRef,
47
+ pub disable_file: bool,
48
+ pub disable_env: bool,
49
+ pub config_file_strict: bool,
50
+ pub env_vars: ByteArrayRef,
51
+ }
52
+
53
+ // Wrapper types for JSON serialization
54
+ #[derive(Serialize)]
55
+ struct ClientEnvConfig {
56
+ profiles: HashMap<String, ClientEnvConfigProfile>,
57
+ }
58
+
59
+ impl From<CoreClientConfig> for ClientEnvConfig {
60
+ fn from(c: CoreClientConfig) -> Self {
61
+ Self {
62
+ profiles: c.profiles.into_iter().map(|(k, v)| (k, v.into())).collect(),
63
+ }
64
+ }
65
+ }
66
+
67
+ #[derive(Serialize)]
68
+ struct ClientEnvConfigProfile {
69
+ #[serde(skip_serializing_if = "Option::is_none")]
70
+ address: Option<String>,
71
+ #[serde(skip_serializing_if = "Option::is_none")]
72
+ namespace: Option<String>,
73
+ #[serde(skip_serializing_if = "Option::is_none")]
74
+ api_key: Option<String>,
75
+ #[serde(skip_serializing_if = "Option::is_none")]
76
+ tls: Option<ClientEnvConfigTLS>,
77
+ #[serde(skip_serializing_if = "Option::is_none")]
78
+ codec: Option<ClientEnvConfigCodec>,
79
+ #[serde(skip_serializing_if = "HashMap::is_empty")]
80
+ grpc_meta: HashMap<String, String>,
81
+ }
82
+
83
+ impl From<CoreClientConfigProfile> for ClientEnvConfigProfile {
84
+ fn from(c: CoreClientConfigProfile) -> Self {
85
+ Self {
86
+ address: c.address,
87
+ namespace: c.namespace,
88
+ api_key: c.api_key,
89
+ tls: c.tls.map(Into::into),
90
+ codec: c.codec.map(Into::into),
91
+ grpc_meta: c.grpc_meta,
92
+ }
93
+ }
94
+ }
95
+
96
+ #[derive(Serialize)]
97
+ struct ClientEnvConfigTLS {
98
+ #[serde(skip_serializing_if = "Option::is_none")]
99
+ disabled: Option<bool>,
100
+ #[serde(skip_serializing_if = "Option::is_none")]
101
+ server_name: Option<String>,
102
+ #[serde(skip_serializing_if = "Option::is_none")]
103
+ server_ca_cert: Option<DataSource>,
104
+ #[serde(skip_serializing_if = "Option::is_none")]
105
+ client_cert: Option<DataSource>,
106
+ #[serde(skip_serializing_if = "Option::is_none")]
107
+ client_key: Option<DataSource>,
108
+ }
109
+
110
+ impl From<CoreClientConfigTLS> for ClientEnvConfigTLS {
111
+ fn from(c: CoreClientConfigTLS) -> Self {
112
+ Self {
113
+ disabled: c.disabled,
114
+ server_name: c.server_name,
115
+ server_ca_cert: c.server_ca_cert.map(Into::into),
116
+ client_cert: c.client_cert.map(Into::into),
117
+ client_key: c.client_key.map(Into::into),
118
+ }
119
+ }
120
+ }
121
+
122
+ #[derive(Serialize)]
123
+ struct ClientEnvConfigCodec {
124
+ #[serde(skip_serializing_if = "Option::is_none")]
125
+ endpoint: Option<String>,
126
+ #[serde(skip_serializing_if = "Option::is_none")]
127
+ auth: Option<String>,
128
+ }
129
+
130
+ impl From<CoreClientConfigCodec> for ClientEnvConfigCodec {
131
+ fn from(c: CoreClientConfigCodec) -> Self {
132
+ Self {
133
+ endpoint: c.endpoint,
134
+ auth: c.auth,
135
+ }
136
+ }
137
+ }
138
+
139
+ #[derive(Serialize)]
140
+ struct DataSource {
141
+ #[serde(skip_serializing_if = "Option::is_none")]
142
+ path: Option<String>,
143
+ #[serde(skip_serializing_if = "Option::is_none")]
144
+ data: Option<Vec<u8>>,
145
+ }
146
+
147
+ impl From<CoreDataSource> for DataSource {
148
+ fn from(c: CoreDataSource) -> Self {
149
+ match c {
150
+ CoreDataSource::Path(p) => Self {
151
+ path: Some(p),
152
+ data: None,
153
+ },
154
+ CoreDataSource::Data(d) => Self {
155
+ path: None,
156
+ data: Some(d),
157
+ },
158
+ }
159
+ }
160
+ }
161
+
162
+ // Helper functions
163
+ fn parse_config_source(
164
+ path: &ByteArrayRef,
165
+ data: &ByteArrayRef,
166
+ ) -> Result<Option<CoreDataSource>, String> {
167
+ if !path.data.is_null() && path.size > 0 {
168
+ Ok(Some(CoreDataSource::Path(path.to_string())))
169
+ } else if !data.data.is_null() && data.size > 0 {
170
+ Ok(Some(CoreDataSource::Data(data.to_vec())))
171
+ } else {
172
+ Ok(None)
173
+ }
174
+ }
175
+
176
+ fn parse_env_vars(env_vars: &ByteArrayRef) -> Result<Option<HashMap<String, String>>, String> {
177
+ if env_vars.data.is_null() || env_vars.size == 0 {
178
+ return Ok(None);
179
+ }
180
+
181
+ let env_json = std::str::from_utf8(env_vars.to_slice())
182
+ .map_err(|e| format!("Invalid env vars UTF-8: {e}"))?;
183
+
184
+ serde_json::from_str(env_json)
185
+ .map(Some)
186
+ .map_err(|e| format!("Invalid env vars JSON: {e}"))
187
+ }
188
+
189
+ // Simple helper to handle serialization errors consistently
190
+ fn serialize_or_error<T: Serialize>(data: T) -> Result<*const ByteArray, *const ByteArray> {
191
+ match serde_json::to_vec(&data) {
192
+ Ok(json_bytes) => {
193
+ let result = ByteArray::from_vec(json_bytes);
194
+ Ok(result.into_raw())
195
+ }
196
+ Err(e) => {
197
+ let err = ByteArray::from_utf8(format!("Failed to serialize: {e}"));
198
+ Err(err.into_raw())
199
+ }
200
+ }
201
+ }
202
+
203
+ /// Load all client profiles from given sources.
204
+ /// Returns ClientConfigOrFail with either success JSON or error message.
205
+ /// The returned ByteArrays must be freed by the caller.
206
+ #[unsafe(no_mangle)]
207
+ pub extern "C" fn temporal_core_client_env_config_load(
208
+ options: *const ClientEnvConfigLoadOptions,
209
+ ) -> ClientEnvConfigOrFail {
210
+ if options.is_null() {
211
+ let err = ByteArray::from_utf8("Options cannot be null".to_string());
212
+ return ClientEnvConfigOrFail {
213
+ success: std::ptr::null(),
214
+ fail: err.into_raw(),
215
+ };
216
+ }
217
+
218
+ let result = || -> Result<ClientEnvConfig, String> {
219
+ let opts = unsafe { &*options };
220
+ let env_vars_map = parse_env_vars(&opts.env_vars)?;
221
+
222
+ let load_options = LoadClientConfigOptions {
223
+ config_source: parse_config_source(&opts.path, &opts.data)?,
224
+ config_file_strict: opts.config_file_strict,
225
+ };
226
+
227
+ let core_config = envconfig::load_client_config(load_options, env_vars_map.as_ref())
228
+ .map_err(|e| e.to_string())?;
229
+
230
+ Ok(core_config.into())
231
+ };
232
+
233
+ match result() {
234
+ Ok(data) => match serialize_or_error(data) {
235
+ Ok(success) => ClientEnvConfigOrFail {
236
+ success,
237
+ fail: std::ptr::null(),
238
+ },
239
+ Err(fail) => ClientEnvConfigOrFail {
240
+ success: std::ptr::null(),
241
+ fail,
242
+ },
243
+ },
244
+ Err(e) => {
245
+ let err = ByteArray::from_utf8(e);
246
+ ClientEnvConfigOrFail {
247
+ success: std::ptr::null(),
248
+ fail: err.into_raw(),
249
+ }
250
+ }
251
+ }
252
+ }
253
+
254
+ /// Load a single client profile from given sources with env overrides.
255
+ /// Returns ClientConfigProfileOrFail with either success JSON or error message.
256
+ /// The returned ByteArrays must be freed by the caller.
257
+ #[unsafe(no_mangle)]
258
+ pub extern "C" fn temporal_core_client_env_config_profile_load(
259
+ options: *const ClientEnvConfigProfileLoadOptions,
260
+ ) -> ClientEnvConfigProfileOrFail {
261
+ if options.is_null() {
262
+ let err = ByteArray::from_utf8("Options cannot be null".to_string());
263
+ return ClientEnvConfigProfileOrFail {
264
+ success: std::ptr::null(),
265
+ fail: err.into_raw(),
266
+ };
267
+ }
268
+
269
+ let result = || -> Result<ClientEnvConfigProfile, String> {
270
+ let opts = unsafe { &*options };
271
+
272
+ let profile_name = if !opts.profile.data.is_null() && opts.profile.size > 0 {
273
+ Some(opts.profile.to_string())
274
+ } else {
275
+ None
276
+ };
277
+
278
+ let config_source = parse_config_source(&opts.path, &opts.data)?;
279
+ let env_vars_map = parse_env_vars(&opts.env_vars)?;
280
+
281
+ let load_options = LoadClientConfigProfileOptions {
282
+ config_source,
283
+ config_file_profile: profile_name,
284
+ config_file_strict: opts.config_file_strict,
285
+ disable_file: opts.disable_file,
286
+ disable_env: opts.disable_env,
287
+ };
288
+
289
+ let profile = envconfig::load_client_config_profile(load_options, env_vars_map.as_ref())
290
+ .map_err(|e| e.to_string())?;
291
+
292
+ Ok(profile.into())
293
+ };
294
+
295
+ match result() {
296
+ Ok(data) => match serialize_or_error(data) {
297
+ Ok(success) => ClientEnvConfigProfileOrFail {
298
+ success,
299
+ fail: std::ptr::null(),
300
+ },
301
+ Err(fail) => ClientEnvConfigProfileOrFail {
302
+ success: std::ptr::null(),
303
+ fail,
304
+ },
305
+ },
306
+ Err(e) => {
307
+ let err = ByteArray::from_utf8(e);
308
+ ClientEnvConfigProfileOrFail {
309
+ success: std::ptr::null(),
310
+ fail: err.into_raw(),
311
+ }
312
+ }
313
+ }
314
+ }
@@ -9,6 +9,7 @@
9
9
  )]
10
10
 
11
11
  pub mod client;
12
+ pub mod envconfig;
12
13
  pub mod metric;
13
14
  pub mod random;
14
15
  pub mod runtime;
@@ -143,7 +144,7 @@ impl ByteArrayRefArray {
143
144
  }
144
145
  }
145
146
 
146
- /// Metadata is <key1>\n<value1>\n<key2>\n<value2>. Metadata keys or
147
+ /// Metadata is `<key1>\n<value1>\n<key2>\n<value2>`. Metadata keys or
147
148
  /// values cannot contain a newline within.
148
149
  pub type MetadataRef = ByteArrayRef;
149
150
 
@@ -1,6 +1,6 @@
1
1
  use crate::{ByteArrayRef, runtime::Runtime};
2
2
  use std::{any::Any, error::Error, sync::Arc, time::Duration};
3
- use temporal_sdk_core_api::telemetry::metrics;
3
+ use temporalio_common::telemetry::metrics;
4
4
 
5
5
  pub struct MetricMeter {
6
6
  core: metrics::TemporalMeter,
@@ -32,9 +32,9 @@ pub extern "C" fn temporal_core_random_int32_range(
32
32
  ) -> i32 {
33
33
  let random = unsafe { &mut *random };
34
34
  if max_inclusive {
35
- random.rand.gen_range(min..=max)
35
+ random.rand.random_range(min..=max)
36
36
  } else {
37
- random.rand.gen_range(min..max)
37
+ random.rand.random_range(min..max)
38
38
  }
39
39
  }
40
40
 
@@ -47,9 +47,9 @@ pub extern "C" fn temporal_core_random_double_range(
47
47
  ) -> f64 {
48
48
  let random = unsafe { &mut *random };
49
49
  if max_inclusive {
50
- random.rand.gen_range(min..=max)
50
+ random.rand.random_range(min..=max)
51
51
  } else {
52
- random.rand.gen_range(min..max)
52
+ random.rand.random_range(min..max)
53
53
  }
54
54
  }
55
55
 
@@ -1,29 +1,29 @@
1
- use crate::ByteArray;
2
- use crate::ByteArrayRef;
3
- use crate::MetadataRef;
4
- use crate::metric::CustomMetricMeter;
5
- use crate::metric::CustomMetricMeterRef;
1
+ use crate::{
2
+ ByteArray, ByteArrayRef, MetadataRef,
3
+ metric::{CustomMetricMeter, CustomMetricMeterRef},
4
+ };
6
5
 
7
6
  use serde_json::json;
8
- use std::collections::HashMap;
9
- use std::fmt;
10
- use std::net::SocketAddr;
11
- use std::str::FromStr;
12
- use std::sync::atomic::AtomicBool;
13
- use std::sync::atomic::Ordering;
14
- use std::sync::{Arc, Mutex};
15
- use std::time::Duration;
16
- use std::time::UNIX_EPOCH;
17
- use temporal_sdk_core::CoreRuntime;
18
- use temporal_sdk_core::TokioRuntimeBuilder;
19
- use temporal_sdk_core::telemetry::{build_otlp_metric_exporter, start_prometheus_metric_exporter};
20
- use temporal_sdk_core_api::telemetry::HistogramBucketOverrides;
21
- use temporal_sdk_core_api::telemetry::MetricTemporality;
22
- use temporal_sdk_core_api::telemetry::metrics::CoreMeter;
23
- use temporal_sdk_core_api::telemetry::{CoreLog, CoreLogConsumer};
24
- use temporal_sdk_core_api::telemetry::{
25
- Logger, OtelCollectorOptionsBuilder, PrometheusExporterOptionsBuilder,
26
- TelemetryOptions as CoreTelemetryOptions, TelemetryOptionsBuilder,
7
+ use std::{
8
+ collections::HashMap,
9
+ fmt,
10
+ net::SocketAddr,
11
+ str::FromStr,
12
+ sync::{
13
+ Arc, Mutex,
14
+ atomic::{AtomicBool, Ordering},
15
+ },
16
+ time::{Duration, UNIX_EPOCH},
17
+ };
18
+ use temporalio_common::telemetry::{
19
+ CoreLog, CoreLogConsumer, HistogramBucketOverrides, Logger, MetricTemporality,
20
+ OtelCollectorOptionsBuilder, PrometheusExporterOptionsBuilder,
21
+ TelemetryOptions as CoreTelemetryOptions, TelemetryOptionsBuilder, metrics::CoreMeter,
22
+ };
23
+ use temporalio_sdk_core::{
24
+ CoreRuntime, RuntimeOptions as CoreRuntimeOptions,
25
+ RuntimeOptionsBuilder as CoreRuntimeOptionsBuilder, TokioRuntimeBuilder,
26
+ telemetry::{build_otlp_metric_exporter, start_prometheus_metric_exporter},
27
27
  };
28
28
  use tracing::Level;
29
29
  use url::Url;
@@ -31,6 +31,7 @@ use url::Url;
31
31
  #[repr(C)]
32
32
  pub struct RuntimeOptions {
33
33
  pub telemetry: *const TelemetryOptions,
34
+ pub worker_heartbeat_interval_millis: u64,
34
35
  }
35
36
 
36
37
  #[repr(C)]
@@ -88,7 +89,7 @@ pub struct OpenTelemetryOptions {
88
89
  pub durations_as_seconds: bool,
89
90
  pub protocol: OpenTelemetryProtocol,
90
91
  /// Histogram bucket overrides in form of
91
- /// <metric1>\n<float>,<float>,<float>\n<metric2>\n<float>,<float>,<float>
92
+ /// `<metric1>\n<float>,<float>,<float>\n<metric2>\n<float>,<float>,<float>`
92
93
  pub histogram_bucket_overrides: MetadataRef,
93
94
  }
94
95
 
@@ -111,7 +112,7 @@ pub struct PrometheusOptions {
111
112
  pub unit_suffix: bool,
112
113
  pub durations_as_seconds: bool,
113
114
  /// Histogram bucket overrides in form of
114
- /// <metric1>\n<float>,<float>,<float>\n<metric2>\n<float>,<float>,<float>
115
+ /// `<metric1>\n<float>,<float>,<float>\n<metric2>\n<float>,<float>,<float>`
115
116
  pub histogram_bucket_overrides: MetadataRef,
116
117
  }
117
118
 
@@ -143,7 +144,7 @@ pub extern "C" fn temporal_core_runtime_new(options: *const RuntimeOptions) -> R
143
144
  let mut runtime = Runtime {
144
145
  core: Arc::new(
145
146
  CoreRuntime::new(
146
- CoreTelemetryOptions::default(),
147
+ CoreRuntimeOptions::default(),
147
148
  TokioRuntimeBuilder::default(),
148
149
  )
149
150
  .unwrap(),
@@ -239,8 +240,21 @@ impl Runtime {
239
240
  CoreTelemetryOptions::default()
240
241
  };
241
242
 
243
+ let heartbeat_interval = if options.worker_heartbeat_interval_millis == 0 {
244
+ None
245
+ } else {
246
+ Some(Duration::from_millis(
247
+ options.worker_heartbeat_interval_millis,
248
+ ))
249
+ };
250
+
251
+ let core_runtime_options = CoreRuntimeOptionsBuilder::default()
252
+ .telemetry_options(telemetry_options)
253
+ .heartbeat_interval(heartbeat_interval)
254
+ .build()?;
255
+
242
256
  // Build core runtime
243
- let mut core = CoreRuntime::new(telemetry_options, TokioRuntimeBuilder::default())?;
257
+ let mut core = CoreRuntime::new(core_runtime_options, TokioRuntimeBuilder::default())?;
244
258
 
245
259
  // We late-bind the metrics after core runtime is created since it needs
246
260
  // the Tokio handle
@@ -1,11 +1,8 @@
1
1
  use std::time::Duration;
2
2
 
3
- use crate::ByteArray;
4
- use crate::ByteArrayRef;
5
- use crate::UserDataHandle;
6
- use crate::runtime::Runtime;
3
+ use crate::{ByteArray, ByteArrayRef, UserDataHandle, runtime::Runtime};
7
4
 
8
- use temporal_sdk_core::ephemeral_server;
5
+ use temporalio_sdk_core::ephemeral_server;
9
6
 
10
7
  pub struct EphemeralServer {
11
8
  runtime: Runtime,
@@ -1,30 +1,36 @@
1
- use crate::client::{
2
- Client, ClientHttpConnectProxyOptions, ClientKeepAliveOptions, ClientRetryOptions,
3
- ClientTlsOptions, RpcCallOptions, temporal_core_client_connect, temporal_core_client_free,
4
- temporal_core_client_rpc_call,
5
- };
6
- use crate::runtime::{
7
- Runtime, RuntimeOptions, RuntimeOrFail, temporal_core_byte_array_free,
8
- temporal_core_runtime_free, temporal_core_runtime_new,
9
- };
10
- use crate::testing::{
11
- DevServerOptions, EphemeralServer, TestServerOptions, temporal_core_ephemeral_server_free,
12
- temporal_core_ephemeral_server_shutdown, temporal_core_ephemeral_server_start_dev_server,
1
+ use crate::{
2
+ client::{
3
+ Client, ClientHttpConnectProxyOptions, ClientKeepAliveOptions, ClientRetryOptions,
4
+ ClientTlsOptions, RpcCallOptions, temporal_core_client_connect, temporal_core_client_free,
5
+ temporal_core_client_rpc_call,
6
+ },
7
+ runtime::{
8
+ Runtime, RuntimeOptions, RuntimeOrFail, temporal_core_byte_array_free,
9
+ temporal_core_runtime_free, temporal_core_runtime_new,
10
+ },
11
+ testing::{
12
+ DevServerOptions, EphemeralServer, TestServerOptions, temporal_core_ephemeral_server_free,
13
+ temporal_core_ephemeral_server_shutdown, temporal_core_ephemeral_server_start_dev_server,
14
+ },
13
15
  };
14
16
 
15
- use crate::tests::utils::{
16
- MetadataMap, OwnedRpcCallOptions, RpcCallError, byte_array_to_string, byte_array_to_vec,
17
- pointer_or_null,
17
+ use crate::{
18
+ ByteArray, ByteArrayRef,
19
+ tests::utils::{
20
+ MetadataMap, OwnedRpcCallOptions, RpcCallError, byte_array_to_string, byte_array_to_vec,
21
+ pointer_or_null,
22
+ },
18
23
  };
19
- use crate::{ByteArray, ByteArrayRef};
20
24
  use anyhow::anyhow;
21
- use std::any::Any;
22
- use std::panic::{AssertUnwindSafe, UnwindSafe};
23
- use std::ptr::NonNull;
24
- use std::sync::{Arc, Condvar, Mutex, MutexGuard, PoisonError, Weak};
25
- use std::time::Duration;
26
- use temporal_client::ClientOptions;
27
- use temporal_sdk_core::ephemeral_server::{
25
+ use std::{
26
+ any::Any,
27
+ panic::{AssertUnwindSafe, UnwindSafe},
28
+ ptr::NonNull,
29
+ sync::{Arc, Condvar, Mutex, MutexGuard, PoisonError, Weak},
30
+ time::Duration,
31
+ };
32
+ use temporalio_client::ClientOptions;
33
+ use temporalio_sdk_core::ephemeral_server::{
28
34
  EphemeralExe, EphemeralExeVersion, TemporalDevServerConfig,
29
35
  };
30
36
 
@@ -147,6 +153,7 @@ impl Context {
147
153
 
148
154
  let RuntimeOrFail { runtime, fail } = temporal_core_runtime_new(&RuntimeOptions {
149
155
  telemetry: std::ptr::null(),
156
+ worker_heartbeat_interval_millis: 0,
150
157
  });
151
158
 
152
159
  if let Some(fail) = byte_array_to_string(runtime, fail) {
@@ -156,11 +163,7 @@ impl Context {
156
163
  temporal_core_runtime_free(runtime);
157
164
  ""
158
165
  };
159
- Err(anyhow!(
160
- "Runtime creation failed: {}{}",
161
- runtime_is_null,
162
- fail
163
- ))
166
+ Err(anyhow!("Runtime creation failed: {runtime_is_null}{fail}"))
164
167
  } else if runtime.is_null() {
165
168
  Err(anyhow!("Runtime creation failed: runtime is null"))
166
169
  } else {
@@ -291,8 +294,8 @@ impl Context {
291
294
  .as_ref()
292
295
  .map(MetadataMap::serialize_from_map);
293
296
 
294
- let tls_options = options.tls_cfg.as_ref().map(|tls_cfg| {
295
- let client_tls_cfg = tls_cfg.client_tls_config.as_ref();
297
+ let tls_options = options.tls_options.as_ref().map(|tls_cfg| {
298
+ let client_tls_cfg = tls_cfg.client_tls_options.as_ref();
296
299
  Box::new(ClientTlsOptions {
297
300
  server_root_ca_cert: tls_cfg.server_root_ca_cert.as_deref().into(),
298
301
  domain: tls_cfg.domain.as_deref().into(),
@@ -304,17 +307,17 @@ impl Context {
304
307
  });
305
308
 
306
309
  let retry_options = Box::new(ClientRetryOptions {
307
- initial_interval_millis: options.retry_config.initial_interval.as_millis() as u64,
308
- randomization_factor: options.retry_config.randomization_factor,
309
- multiplier: options.retry_config.multiplier,
310
- max_interval_millis: options.retry_config.max_interval.as_millis() as u64,
310
+ initial_interval_millis: options.retry_options.initial_interval.as_millis() as u64,
311
+ randomization_factor: options.retry_options.randomization_factor,
312
+ multiplier: options.retry_options.multiplier,
313
+ max_interval_millis: options.retry_options.max_interval.as_millis() as u64,
311
314
  max_elapsed_time_millis: options
312
- .retry_config
315
+ .retry_options
313
316
  .max_elapsed_time
314
317
  .as_ref()
315
318
  .map(Duration::as_millis)
316
319
  .unwrap_or(0) as u64,
317
- max_retries: options.retry_config.max_retries,
320
+ max_retries: options.retry_options.max_retries,
318
321
  });
319
322
 
320
323
  let keep_alive_options = options.keep_alive.as_ref().map(|keep_alive| {
@@ -516,8 +519,7 @@ extern "C" fn ephemeral_server_start_callback(
516
519
 
517
520
  if let Some(fail) = fail {
518
521
  ContextOperationState::CallbackError(anyhow!(
519
- "Ephemeral server start failed: {}",
520
- fail
522
+ "Ephemeral server start failed: {fail}"
521
523
  ))
522
524
  } else if server.is_null() {
523
525
  ContextOperationState::CallbackError(anyhow!(
@@ -562,8 +564,7 @@ extern "C" fn ephemeral_server_shutdown_callback(
562
564
  let _ = context.complete_operation_catch_unwind(|guard| {
563
565
  if let Some(fail) = byte_array_to_string(guard.runtime, std::mem::take(&mut fail)) {
564
566
  ContextOperationState::CallbackError(anyhow!(
565
- "Ephemeral server shutdown failed: {}",
566
- fail
567
+ "Ephemeral server shutdown failed: {fail}"
567
568
  ))
568
569
  } else {
569
570
  ContextOperationState::CallbackOk(None)
@@ -585,7 +586,7 @@ extern "C" fn client_connect_callback(
585
586
  if let Some(context) = user_data.context.upgrade() {
586
587
  let _ = context.complete_operation_catch_unwind(|guard| {
587
588
  if let Some(fail) = byte_array_to_string(guard.runtime, std::mem::take(&mut fail)) {
588
- ContextOperationState::CallbackError(anyhow!("Client connect failed: {}", fail))
589
+ ContextOperationState::CallbackError(anyhow!("Client connect failed: {fail}"))
589
590
  } else {
590
591
  guard.client = std::mem::take(&mut client);
591
592
  ContextOperationState::CallbackOk(None)