@temporalio/core-bridge 1.15.0 → 1.16.1

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 (209) hide show
  1. package/Cargo.lock +172 -70
  2. package/lib/native.d.ts +1 -1
  3. package/package.json +2 -2
  4. package/releases/aarch64-apple-darwin/index.node +0 -0
  5. package/releases/aarch64-unknown-linux-gnu/index.node +0 -0
  6. package/releases/x86_64-apple-darwin/index.node +0 -0
  7. package/releases/x86_64-pc-windows-msvc/index.node +0 -0
  8. package/releases/x86_64-unknown-linux-gnu/index.node +0 -0
  9. package/sdk-core/.github/workflows/per-pr.yml +6 -6
  10. package/sdk-core/AGENTS.md +41 -30
  11. package/sdk-core/Cargo.toml +3 -0
  12. package/sdk-core/README.md +15 -9
  13. package/sdk-core/crates/client/Cargo.toml +4 -0
  14. package/sdk-core/crates/client/README.md +139 -0
  15. package/sdk-core/crates/client/src/async_activity_handle.rs +297 -0
  16. package/sdk-core/crates/client/src/callback_based.rs +7 -0
  17. package/sdk-core/crates/client/src/errors.rs +294 -0
  18. package/sdk-core/crates/client/src/{raw.rs → grpc.rs} +280 -159
  19. package/sdk-core/crates/client/src/lib.rs +920 -1326
  20. package/sdk-core/crates/client/src/metrics.rs +24 -33
  21. package/sdk-core/crates/client/src/options_structs.rs +457 -0
  22. package/sdk-core/crates/client/src/replaceable.rs +5 -4
  23. package/sdk-core/crates/client/src/request_extensions.rs +8 -9
  24. package/sdk-core/crates/client/src/retry.rs +99 -54
  25. package/sdk-core/crates/client/src/{worker/mod.rs → worker.rs} +1 -1
  26. package/sdk-core/crates/client/src/workflow_handle.rs +826 -0
  27. package/sdk-core/crates/common/Cargo.toml +61 -2
  28. package/sdk-core/crates/common/build.rs +742 -12
  29. package/sdk-core/crates/common/protos/api_upstream/.github/workflows/ci.yml +2 -0
  30. package/sdk-core/crates/common/protos/api_upstream/Makefile +2 -1
  31. package/sdk-core/crates/common/protos/api_upstream/buf.yaml +0 -3
  32. package/sdk-core/crates/common/protos/api_upstream/cmd/check-path-conflicts/main.go +137 -0
  33. package/sdk-core/crates/common/protos/api_upstream/openapi/openapiv2.json +1166 -770
  34. package/sdk-core/crates/common/protos/api_upstream/openapi/openapiv3.yaml +1243 -750
  35. package/sdk-core/crates/common/protos/api_upstream/temporal/api/deployment/v1/message.proto +2 -2
  36. package/sdk-core/crates/common/protos/api_upstream/temporal/api/enums/v1/workflow.proto +4 -3
  37. package/sdk-core/crates/common/protos/api_upstream/temporal/api/failure/v1/message.proto +1 -0
  38. package/sdk-core/crates/common/protos/api_upstream/temporal/api/history/v1/message.proto +4 -0
  39. package/sdk-core/crates/common/protos/api_upstream/temporal/api/namespace/v1/message.proto +6 -0
  40. package/sdk-core/crates/common/protos/api_upstream/temporal/api/nexus/v1/message.proto +16 -1
  41. package/sdk-core/crates/common/protos/api_upstream/temporal/api/workflowservice/v1/request_response.proto +64 -6
  42. package/sdk-core/crates/common/protos/api_upstream/temporal/api/workflowservice/v1/service.proto +88 -33
  43. package/sdk-core/crates/common/protos/local/temporal/sdk/core/nexus/nexus.proto +4 -2
  44. package/sdk-core/crates/common/protos/local/temporal/sdk/core/workflow_activation/workflow_activation.proto +4 -0
  45. package/sdk-core/crates/common/protos/local/temporal/sdk/core/workflow_commands/workflow_commands.proto +5 -5
  46. package/sdk-core/crates/common/src/activity_definition.rs +20 -0
  47. package/sdk-core/crates/common/src/data_converters.rs +770 -0
  48. package/sdk-core/crates/common/src/envconfig.rs +5 -0
  49. package/sdk-core/crates/common/src/lib.rs +15 -211
  50. package/sdk-core/crates/common/src/payload_visitor.rs +648 -0
  51. package/sdk-core/crates/common/src/priority.rs +110 -0
  52. package/sdk-core/crates/common/src/protos/canned_histories.rs +3 -0
  53. package/sdk-core/crates/common/src/protos/history_builder.rs +45 -0
  54. package/sdk-core/crates/common/src/protos/history_info.rs +2 -0
  55. package/sdk-core/crates/common/src/protos/mod.rs +122 -27
  56. package/sdk-core/crates/common/src/protos/task_token.rs +3 -3
  57. package/sdk-core/crates/common/src/protos/utilities.rs +11 -0
  58. package/sdk-core/crates/{sdk-core → common}/src/telemetry/log_export.rs +5 -7
  59. package/sdk-core/crates/common/src/telemetry/metrics/core.rs +125 -0
  60. package/sdk-core/crates/common/src/telemetry/metrics.rs +268 -223
  61. package/sdk-core/crates/{sdk-core → common}/src/telemetry/otel.rs +8 -13
  62. package/sdk-core/crates/{sdk-core → common}/src/telemetry/prometheus_meter.rs +49 -50
  63. package/sdk-core/crates/{sdk-core → common}/src/telemetry/prometheus_server.rs +2 -3
  64. package/sdk-core/crates/common/src/telemetry.rs +264 -4
  65. package/sdk-core/crates/common/src/worker.rs +68 -603
  66. package/sdk-core/crates/common/src/workflow_definition.rs +60 -0
  67. package/sdk-core/crates/macros/Cargo.toml +5 -1
  68. package/sdk-core/crates/macros/src/activities_definitions.rs +585 -0
  69. package/sdk-core/crates/macros/src/fsm_impl.rs +507 -0
  70. package/sdk-core/crates/macros/src/lib.rs +138 -512
  71. package/sdk-core/crates/macros/src/macro_utils.rs +106 -0
  72. package/sdk-core/crates/macros/src/workflow_definitions.rs +1224 -0
  73. package/sdk-core/crates/sdk/Cargo.toml +19 -6
  74. package/sdk-core/crates/sdk/README.md +415 -0
  75. package/sdk-core/crates/sdk/src/activities.rs +417 -0
  76. package/sdk-core/crates/sdk/src/interceptors.rs +1 -1
  77. package/sdk-core/crates/sdk/src/lib.rs +757 -442
  78. package/sdk-core/crates/sdk/src/workflow_context/options.rs +45 -35
  79. package/sdk-core/crates/sdk/src/workflow_context.rs +1033 -289
  80. package/sdk-core/crates/sdk/src/workflow_future.rs +277 -213
  81. package/sdk-core/crates/sdk/src/workflows.rs +711 -0
  82. package/sdk-core/crates/sdk-core/Cargo.toml +57 -64
  83. package/sdk-core/crates/sdk-core/benches/workflow_replay_bench.rs +41 -35
  84. package/sdk-core/crates/sdk-core/machine_coverage/ActivityMachine_Coverage.puml +1 -1
  85. package/sdk-core/crates/sdk-core/src/abstractions.rs +6 -10
  86. package/sdk-core/crates/sdk-core/src/core_tests/activity_tasks.rs +6 -5
  87. package/sdk-core/crates/sdk-core/src/core_tests/mod.rs +13 -15
  88. package/sdk-core/crates/sdk-core/src/core_tests/queries.rs +21 -25
  89. package/sdk-core/crates/sdk-core/src/core_tests/replay_flag.rs +7 -10
  90. package/sdk-core/crates/sdk-core/src/core_tests/updates.rs +14 -17
  91. package/sdk-core/crates/sdk-core/src/core_tests/workers.rs +493 -26
  92. package/sdk-core/crates/sdk-core/src/core_tests/workflow_tasks.rs +4 -8
  93. package/sdk-core/crates/sdk-core/src/ephemeral_server/mod.rs +7 -7
  94. package/sdk-core/crates/sdk-core/src/histfetch.rs +20 -10
  95. package/sdk-core/crates/sdk-core/src/lib.rs +41 -111
  96. package/sdk-core/crates/sdk-core/src/pollers/mod.rs +4 -9
  97. package/sdk-core/crates/sdk-core/src/pollers/poll_buffer.rs +118 -19
  98. package/sdk-core/crates/sdk-core/src/protosext/mod.rs +2 -2
  99. package/sdk-core/crates/sdk-core/src/replay/mod.rs +14 -5
  100. package/sdk-core/crates/sdk-core/src/telemetry/metrics.rs +179 -196
  101. package/sdk-core/crates/sdk-core/src/telemetry/mod.rs +3 -280
  102. package/sdk-core/crates/sdk-core/src/test_help/integ_helpers.rs +6 -9
  103. package/sdk-core/crates/sdk-core/src/test_help/unit_helpers.rs +3 -6
  104. package/sdk-core/crates/sdk-core/src/worker/activities/local_activities.rs +11 -14
  105. package/sdk-core/crates/sdk-core/src/worker/activities.rs +16 -19
  106. package/sdk-core/crates/sdk-core/src/worker/client/mocks.rs +9 -5
  107. package/sdk-core/crates/sdk-core/src/worker/client.rs +103 -81
  108. package/sdk-core/crates/sdk-core/src/worker/heartbeat.rs +7 -11
  109. package/sdk-core/crates/sdk-core/src/worker/mod.rs +1124 -229
  110. package/sdk-core/crates/sdk-core/src/worker/nexus.rs +145 -23
  111. package/sdk-core/crates/sdk-core/src/worker/slot_provider.rs +2 -2
  112. package/sdk-core/crates/sdk-core/src/worker/tuner/fixed_size.rs +2 -2
  113. package/sdk-core/crates/sdk-core/src/worker/tuner/resource_based.rs +13 -13
  114. package/sdk-core/crates/sdk-core/src/worker/tuner.rs +28 -8
  115. package/sdk-core/crates/sdk-core/src/worker/workflow/driven_workflow.rs +9 -3
  116. package/sdk-core/crates/sdk-core/src/worker/workflow/machines/upsert_search_attributes_state_machine.rs +21 -22
  117. package/sdk-core/crates/sdk-core/src/worker/workflow/machines/workflow_machines.rs +19 -4
  118. package/sdk-core/crates/sdk-core/src/worker/workflow/managed_run.rs +14 -18
  119. package/sdk-core/crates/sdk-core/src/worker/workflow/mod.rs +4 -6
  120. package/sdk-core/crates/sdk-core/src/worker/workflow/run_cache.rs +4 -7
  121. package/sdk-core/crates/sdk-core/src/worker/workflow/wft_extraction.rs +2 -4
  122. package/sdk-core/crates/sdk-core/src/worker/workflow/wft_poller.rs +8 -9
  123. package/sdk-core/crates/sdk-core/src/worker/workflow/workflow_stream.rs +1 -3
  124. package/sdk-core/crates/sdk-core/tests/activities_procmacro.rs +6 -0
  125. package/sdk-core/crates/sdk-core/tests/activities_trybuild/basic_pass.rs +54 -0
  126. package/sdk-core/crates/sdk-core/tests/activities_trybuild/invalid_self_type_fail.rs +18 -0
  127. package/sdk-core/crates/sdk-core/tests/activities_trybuild/invalid_self_type_fail.stderr +5 -0
  128. package/sdk-core/crates/sdk-core/tests/activities_trybuild/missing_context_fail.rs +14 -0
  129. package/sdk-core/crates/sdk-core/tests/activities_trybuild/missing_context_fail.stderr +5 -0
  130. package/sdk-core/crates/sdk-core/tests/activities_trybuild/multi_arg_pass.rs +48 -0
  131. package/sdk-core/crates/sdk-core/tests/activities_trybuild/no_input_pass.rs +14 -0
  132. package/sdk-core/crates/sdk-core/tests/activities_trybuild/no_return_type_pass.rs +19 -0
  133. package/sdk-core/crates/sdk-core/tests/cloud_tests.rs +14 -5
  134. package/sdk-core/crates/sdk-core/tests/common/activity_functions.rs +55 -0
  135. package/sdk-core/crates/sdk-core/tests/common/mod.rs +241 -196
  136. package/sdk-core/crates/sdk-core/tests/common/workflows.rs +41 -28
  137. package/sdk-core/crates/sdk-core/tests/global_metric_tests.rs +3 -5
  138. package/sdk-core/crates/sdk-core/tests/heavy_tests/fuzzy_workflow.rs +73 -64
  139. package/sdk-core/crates/sdk-core/tests/heavy_tests.rs +298 -252
  140. package/sdk-core/crates/sdk-core/tests/integ_tests/async_activity_client_tests.rs +230 -0
  141. package/sdk-core/crates/sdk-core/tests/integ_tests/client_tests.rs +94 -57
  142. package/sdk-core/crates/sdk-core/tests/integ_tests/data_converter_tests.rs +381 -0
  143. package/sdk-core/crates/sdk-core/tests/integ_tests/ephemeral_server_tests.rs +16 -12
  144. package/sdk-core/crates/sdk-core/tests/integ_tests/heartbeat_tests.rs +48 -40
  145. package/sdk-core/crates/sdk-core/tests/integ_tests/metrics_tests.rs +327 -255
  146. package/sdk-core/crates/sdk-core/tests/integ_tests/pagination_tests.rs +50 -45
  147. package/sdk-core/crates/sdk-core/tests/integ_tests/polling_tests.rs +147 -126
  148. package/sdk-core/crates/sdk-core/tests/integ_tests/queries_tests.rs +103 -89
  149. package/sdk-core/crates/sdk-core/tests/integ_tests/update_tests.rs +609 -453
  150. package/sdk-core/crates/sdk-core/tests/integ_tests/visibility_tests.rs +80 -62
  151. package/sdk-core/crates/sdk-core/tests/integ_tests/worker_heartbeat_tests.rs +360 -231
  152. package/sdk-core/crates/sdk-core/tests/integ_tests/worker_tests.rs +248 -185
  153. package/sdk-core/crates/sdk-core/tests/integ_tests/worker_versioning_tests.rs +52 -43
  154. package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_client_tests.rs +180 -0
  155. package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_tests/activities.rs +428 -315
  156. package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_tests/cancel_external.rs +82 -56
  157. package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_tests/cancel_wf.rs +56 -28
  158. package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_tests/child_workflows.rs +364 -243
  159. package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_tests/client_interactions.rs +552 -0
  160. package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_tests/continue_as_new.rs +101 -42
  161. package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_tests/determinism.rs +243 -147
  162. package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_tests/eager.rs +98 -28
  163. package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_tests/local_activities.rs +1475 -1036
  164. package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_tests/modify_wf_properties.rs +73 -41
  165. package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_tests/nexus.rs +397 -238
  166. package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_tests/patches.rs +414 -189
  167. package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_tests/queries.rs +415 -0
  168. package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_tests/replay.rs +96 -36
  169. package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_tests/resets.rs +154 -137
  170. package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_tests/signals.rs +183 -105
  171. package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_tests/stickyness.rs +85 -38
  172. package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_tests/timers.rs +142 -40
  173. package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_tests/upsert_search_attrs.rs +73 -54
  174. package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_tests.rs +363 -226
  175. package/sdk-core/crates/sdk-core/tests/main.rs +17 -15
  176. package/sdk-core/crates/sdk-core/tests/manual_tests.rs +207 -152
  177. package/sdk-core/crates/sdk-core/tests/shared_tests/mod.rs +65 -34
  178. package/sdk-core/crates/sdk-core/tests/shared_tests/priority.rs +107 -84
  179. package/sdk-core/crates/sdk-core/tests/workflows_procmacro.rs +6 -0
  180. package/sdk-core/crates/sdk-core/tests/workflows_trybuild/async_query_fail.rs +26 -0
  181. package/sdk-core/crates/sdk-core/tests/workflows_trybuild/async_query_fail.stderr +5 -0
  182. package/sdk-core/crates/sdk-core/tests/workflows_trybuild/basic_pass.rs +49 -0
  183. package/sdk-core/crates/sdk-core/tests/workflows_trybuild/minimal_pass.rs +21 -0
  184. package/sdk-core/crates/sdk-core/tests/workflows_trybuild/mut_query_fail.rs +26 -0
  185. package/sdk-core/crates/sdk-core/tests/workflows_trybuild/mut_query_fail.stderr +5 -0
  186. package/sdk-core/crates/sdk-core/tests/workflows_trybuild/sync_run_fail.rs +21 -0
  187. package/sdk-core/crates/sdk-core/tests/workflows_trybuild/sync_run_fail.stderr +5 -0
  188. package/sdk-core/crates/sdk-core-c-bridge/Cargo.toml +7 -1
  189. package/sdk-core/crates/sdk-core-c-bridge/include/temporal-sdk-core-c-bridge.h +14 -14
  190. package/sdk-core/crates/sdk-core-c-bridge/src/client.rs +83 -74
  191. package/sdk-core/crates/sdk-core-c-bridge/src/metric.rs +9 -14
  192. package/sdk-core/crates/sdk-core-c-bridge/src/runtime.rs +1 -2
  193. package/sdk-core/crates/sdk-core-c-bridge/src/tests/context.rs +13 -13
  194. package/sdk-core/crates/sdk-core-c-bridge/src/tests/mod.rs +6 -6
  195. package/sdk-core/crates/sdk-core-c-bridge/src/tests/utils.rs +3 -4
  196. package/sdk-core/crates/sdk-core-c-bridge/src/worker.rs +62 -75
  197. package/sdk-core/rustfmt.toml +2 -1
  198. package/src/client.rs +205 -318
  199. package/src/metrics.rs +22 -30
  200. package/src/runtime.rs +4 -5
  201. package/src/worker.rs +16 -19
  202. package/ts/native.ts +1 -1
  203. package/sdk-core/crates/client/src/workflow_handle/mod.rs +0 -212
  204. package/sdk-core/crates/common/src/errors.rs +0 -85
  205. package/sdk-core/crates/common/tests/worker_task_types_test.rs +0 -129
  206. package/sdk-core/crates/sdk/src/activity_context.rs +0 -238
  207. package/sdk-core/crates/sdk/src/app_data.rs +0 -37
  208. package/sdk-core/crates/sdk-core/tests/integ_tests/activity_functions.rs +0 -5
  209. package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_tests/appdata_propagation.rs +0 -61
@@ -0,0 +1,294 @@
1
+ //! Contains errors that can be returned by clients.
2
+
3
+ use http::uri::InvalidUri;
4
+ use temporalio_common::{
5
+ data_converters::PayloadConversionError,
6
+ protos::temporal::api::{common::v1::Payload, failure::v1::Failure, query::v1::QueryRejected},
7
+ };
8
+ use tonic::Code;
9
+
10
+ /// Errors thrown while attempting to establish a connection to the server
11
+ #[derive(thiserror::Error, Debug)]
12
+ #[non_exhaustive]
13
+ pub enum ClientConnectError {
14
+ /// Invalid URI. Configuration error, fatal.
15
+ #[error("Invalid URI: {0:?}")]
16
+ InvalidUri(#[from] InvalidUri),
17
+ /// Invalid gRPC metadata headers. Configuration error.
18
+ #[error("Invalid headers: {0}")]
19
+ InvalidHeaders(#[from] InvalidHeaderError),
20
+ /// Server connection error. Crashing and restarting the worker is likely best.
21
+ #[error("Server connection error: {0:?}")]
22
+ TonicTransportError(#[from] tonic::transport::Error),
23
+ /// We couldn't successfully make the `get_system_info` call at connection time to establish
24
+ /// server capabilities / verify server is responding.
25
+ #[error("`get_system_info` call error after connection: {0:?}")]
26
+ SystemInfoCallError(tonic::Status),
27
+ }
28
+
29
+ /// Errors thrown when a gRPC metadata header is invalid.
30
+ #[derive(thiserror::Error, Debug)]
31
+ #[non_exhaustive]
32
+ pub enum InvalidHeaderError {
33
+ /// A binary header key was invalid
34
+ #[error("Invalid binary header key '{key}': {source}")]
35
+ InvalidBinaryHeaderKey {
36
+ /// The invalid key
37
+ key: String,
38
+ /// The source error from tonic
39
+ source: tonic::metadata::errors::InvalidMetadataKey,
40
+ },
41
+ /// An ASCII header key was invalid
42
+ #[error("Invalid ASCII header key '{key}': {source}")]
43
+ InvalidAsciiHeaderKey {
44
+ /// The invalid key
45
+ key: String,
46
+ /// The source error from tonic
47
+ source: tonic::metadata::errors::InvalidMetadataKey,
48
+ },
49
+ /// An ASCII header value was invalid
50
+ #[error("Invalid ASCII header value for key '{key}': {source}")]
51
+ InvalidAsciiHeaderValue {
52
+ /// The key
53
+ key: String,
54
+ /// The invalid value
55
+ value: String,
56
+ /// The source error from tonic
57
+ source: tonic::metadata::errors::InvalidMetadataValue,
58
+ },
59
+ }
60
+
61
+ /// Errors that can occur when starting a workflow.
62
+ #[derive(thiserror::Error, Debug)]
63
+ #[non_exhaustive]
64
+ pub enum WorkflowStartError {
65
+ /// The workflow already exists.
66
+ #[error("Workflow already started with run ID: {run_id:?}")]
67
+ AlreadyStarted {
68
+ /// Run ID of the already-started workflow if this was raised by the client.
69
+ run_id: Option<String>,
70
+ /// The original gRPC status from the server.
71
+ #[source]
72
+ source: tonic::Status,
73
+ },
74
+ /// Error converting the input to a payload.
75
+ #[error("Failed to serialize workflow input: {0}")]
76
+ PayloadConversion(#[from] PayloadConversionError),
77
+ /// An uncategorized rpc error from the server.
78
+ #[error("Server error: {0}")]
79
+ Rpc(#[from] tonic::Status),
80
+ }
81
+
82
+ /// Errors returned by query operations on [crate::WorkflowHandle].
83
+ #[derive(Debug, thiserror::Error)]
84
+ #[non_exhaustive]
85
+ pub enum WorkflowQueryError {
86
+ /// The workflow was not found.
87
+ #[error("Workflow not found")]
88
+ NotFound(#[source] tonic::Status),
89
+
90
+ /// The query was rejected based on the rejection condition.
91
+ #[error("Query rejected: workflow status {:?}", .0.status)]
92
+ Rejected(QueryRejected),
93
+
94
+ /// Error serializing input or deserializing output.
95
+ #[error("Payload conversion error: {0}")]
96
+ PayloadConversion(#[from] PayloadConversionError),
97
+
98
+ /// An uncategorized RPC error from the server.
99
+ #[error("Server error: {0}")]
100
+ Rpc(tonic::Status),
101
+
102
+ /// Other errors.
103
+ #[error(transparent)]
104
+ Other(#[from] Box<dyn std::error::Error + Send + Sync>),
105
+ }
106
+
107
+ impl WorkflowQueryError {
108
+ pub(crate) fn from_status(status: tonic::Status) -> Self {
109
+ if status.code() == Code::NotFound {
110
+ Self::NotFound(status)
111
+ } else {
112
+ Self::Rpc(status)
113
+ }
114
+ }
115
+ }
116
+
117
+ /// Errors returned by update operations on [crate::WorkflowHandle].
118
+ #[derive(Debug, thiserror::Error)]
119
+ #[non_exhaustive]
120
+ pub enum WorkflowUpdateError {
121
+ /// The workflow was not found.
122
+ #[error("Workflow not found")]
123
+ NotFound(#[source] tonic::Status),
124
+
125
+ /// The update failed with an application-level failure.
126
+ #[error("Update failed: {0:?}")]
127
+ Failed(Box<Failure>),
128
+
129
+ /// Error serializing input or deserializing output.
130
+ #[error("Payload conversion error: {0}")]
131
+ PayloadConversion(#[from] PayloadConversionError),
132
+
133
+ /// An uncategorized RPC error from the server.
134
+ #[error("Server error: {0}")]
135
+ Rpc(tonic::Status),
136
+
137
+ /// Other errors.
138
+ #[error(transparent)]
139
+ Other(#[from] Box<dyn std::error::Error + Send + Sync>),
140
+ }
141
+
142
+ impl WorkflowUpdateError {
143
+ pub(crate) fn from_status(status: tonic::Status) -> Self {
144
+ if status.code() == Code::NotFound {
145
+ Self::NotFound(status)
146
+ } else {
147
+ Self::Rpc(status)
148
+ }
149
+ }
150
+ }
151
+
152
+ /// Errors returned by workflow get_result operations.
153
+ #[derive(Debug, thiserror::Error)]
154
+ #[non_exhaustive]
155
+ pub enum WorkflowGetResultError {
156
+ /// The workflow finished in failure.
157
+ #[error("Workflow failed: {0:?}")]
158
+ Failed(Box<Failure>),
159
+
160
+ /// The workflow was cancelled.
161
+ #[error("Workflow cancelled")]
162
+ Cancelled {
163
+ /// Details provided at cancellation time.
164
+ details: Vec<Payload>,
165
+ },
166
+
167
+ /// The workflow was terminated.
168
+ #[error("Workflow terminated")]
169
+ Terminated {
170
+ /// Details provided at termination time.
171
+ details: Vec<Payload>,
172
+ },
173
+
174
+ /// The workflow timed out.
175
+ #[error("Workflow timed out")]
176
+ TimedOut,
177
+
178
+ /// The workflow continued as new.
179
+ #[error("Workflow continued as new")]
180
+ ContinuedAsNew,
181
+
182
+ /// The workflow was not found.
183
+ #[error("Workflow not found")]
184
+ NotFound(#[source] tonic::Status),
185
+
186
+ /// Error serializing input or deserializing output.
187
+ #[error("Payload conversion error: {0}")]
188
+ PayloadConversion(#[from] PayloadConversionError),
189
+
190
+ /// An uncategorized RPC error from the server.
191
+ #[error("Server error: {0}")]
192
+ Rpc(tonic::Status),
193
+
194
+ /// Other errors.
195
+ #[error(transparent)]
196
+ Other(#[from] Box<dyn std::error::Error + Send + Sync>),
197
+ }
198
+
199
+ impl From<WorkflowInteractionError> for WorkflowGetResultError {
200
+ fn from(err: WorkflowInteractionError) -> Self {
201
+ match err {
202
+ WorkflowInteractionError::NotFound(s) => Self::NotFound(s),
203
+ WorkflowInteractionError::PayloadConversion(e) => Self::PayloadConversion(e),
204
+ WorkflowInteractionError::Rpc(s) => Self::Rpc(s),
205
+ WorkflowInteractionError::Other(e) => Self::Other(e),
206
+ }
207
+ }
208
+ }
209
+
210
+ impl WorkflowGetResultError {
211
+ /// Returns `true` if this error represents a workflow-level non-success outcome
212
+ /// (Failed, Cancelled, Terminated, TimedOut, or ContinuedAsNew) rather than an
213
+ /// infrastructure/RPC error.
214
+ pub fn is_workflow_outcome(&self) -> bool {
215
+ matches!(
216
+ self,
217
+ Self::Failed(_)
218
+ | Self::Cancelled { .. }
219
+ | Self::Terminated { .. }
220
+ | Self::TimedOut
221
+ | Self::ContinuedAsNew
222
+ )
223
+ }
224
+ }
225
+
226
+ /// Errors returned by client methods that don't need more specific error types.
227
+ #[derive(thiserror::Error, Debug)]
228
+ #[non_exhaustive]
229
+ pub enum ClientError {
230
+ /// An uncategorized rpc error from the server.
231
+ #[error("Server error: {0}")]
232
+ Rpc(#[from] tonic::Status),
233
+ }
234
+
235
+ /// Errors returned by methods on [crate::WorkflowHandle] for general operations
236
+ /// like signal, cancel, terminate, describe, fetch_history, and get_result.
237
+ #[derive(Debug, thiserror::Error)]
238
+ #[non_exhaustive]
239
+ pub enum WorkflowInteractionError {
240
+ /// The workflow was not found.
241
+ #[error("Workflow not found")]
242
+ NotFound(#[source] tonic::Status),
243
+
244
+ /// Error serializing input or deserializing output.
245
+ #[error("Payload conversion error: {0}")]
246
+ PayloadConversion(#[from] PayloadConversionError),
247
+
248
+ /// An uncategorized RPC error from the server.
249
+ #[error("Server error: {0}")]
250
+ Rpc(tonic::Status),
251
+
252
+ /// Other errors.
253
+ #[error(transparent)]
254
+ Other(#[from] Box<dyn std::error::Error + Send + Sync>),
255
+ }
256
+
257
+ impl WorkflowInteractionError {
258
+ pub(crate) fn from_status(status: tonic::Status) -> Self {
259
+ if status.code() == Code::NotFound {
260
+ Self::NotFound(status)
261
+ } else {
262
+ Self::Rpc(status)
263
+ }
264
+ }
265
+ }
266
+
267
+ /// Errors that can occur when completing an activity asynchronously.
268
+ #[derive(Debug, thiserror::Error)]
269
+ #[non_exhaustive]
270
+ pub enum AsyncActivityError {
271
+ /// The activity was not found (e.g., already completed, cancelled, or never existed).
272
+ #[error("Activity not found")]
273
+ NotFound(#[source] tonic::Status),
274
+ /// An uncategorized rpc error from the server.
275
+ #[error("Server error: {0}")]
276
+ Rpc(#[from] tonic::Status),
277
+ }
278
+
279
+ impl AsyncActivityError {
280
+ pub(crate) fn from_status(status: tonic::Status) -> Self {
281
+ if status.code() == Code::NotFound {
282
+ Self::NotFound(status)
283
+ } else {
284
+ Self::Rpc(status)
285
+ }
286
+ }
287
+ }
288
+
289
+ /// Errors that can occur when constructing a [`crate::Client`].
290
+ ///
291
+ /// Currently has no variants, but may be extended in the future.
292
+ #[derive(Debug, thiserror::Error)]
293
+ #[non_exhaustive]
294
+ pub enum ClientNewError {}