@temporalio/core-bridge 0.22.0 → 1.0.0-rc.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 (139) hide show
  1. package/Cargo.lock +120 -15
  2. package/Cargo.toml +3 -1
  3. package/README.md +1 -1
  4. package/index.d.ts +137 -33
  5. package/package.json +6 -6
  6. package/releases/aarch64-apple-darwin/index.node +0 -0
  7. package/releases/aarch64-unknown-linux-gnu/index.node +0 -0
  8. package/releases/x86_64-apple-darwin/index.node +0 -0
  9. package/releases/x86_64-pc-windows-msvc/index.node +0 -0
  10. package/releases/x86_64-unknown-linux-gnu/index.node +0 -0
  11. package/sdk-core/.buildkite/docker/docker-compose.yaml +4 -2
  12. package/sdk-core/ARCHITECTURE.md +9 -7
  13. package/sdk-core/README.md +5 -1
  14. package/sdk-core/arch_docs/diagrams/workflow_internals.svg +1 -0
  15. package/sdk-core/bridge-ffi/src/lib.rs +1 -1
  16. package/sdk-core/bridge-ffi/src/wrappers.rs +60 -37
  17. package/sdk-core/client/Cargo.toml +1 -0
  18. package/sdk-core/client/src/lib.rs +50 -15
  19. package/sdk-core/client/src/raw.rs +167 -55
  20. package/sdk-core/client/src/retry.rs +9 -4
  21. package/sdk-core/client/src/workflow_handle/mod.rs +4 -2
  22. package/sdk-core/core/Cargo.toml +2 -0
  23. package/sdk-core/core/benches/workflow_replay.rs +1 -7
  24. package/sdk-core/core/src/abstractions.rs +137 -16
  25. package/sdk-core/core/src/core_tests/activity_tasks.rs +258 -63
  26. package/sdk-core/core/src/core_tests/child_workflows.rs +1 -2
  27. package/sdk-core/core/src/core_tests/determinism.rs +2 -2
  28. package/sdk-core/core/src/core_tests/local_activities.rs +8 -7
  29. package/sdk-core/core/src/core_tests/queries.rs +146 -60
  30. package/sdk-core/core/src/core_tests/replay_flag.rs +1 -1
  31. package/sdk-core/core/src/core_tests/workers.rs +39 -23
  32. package/sdk-core/core/src/core_tests/workflow_cancels.rs +1 -1
  33. package/sdk-core/core/src/core_tests/workflow_tasks.rs +387 -280
  34. package/sdk-core/core/src/lib.rs +8 -5
  35. package/sdk-core/core/src/pollers/poll_buffer.rs +16 -10
  36. package/sdk-core/core/src/protosext/mod.rs +7 -9
  37. package/sdk-core/core/src/retry_logic.rs +73 -16
  38. package/sdk-core/core/src/telemetry/metrics.rs +21 -7
  39. package/sdk-core/core/src/telemetry/mod.rs +182 -110
  40. package/sdk-core/core/src/test_help/mod.rs +341 -109
  41. package/sdk-core/core/src/worker/activities/activity_heartbeat_manager.rs +18 -9
  42. package/sdk-core/core/src/worker/activities/local_activities.rs +22 -25
  43. package/sdk-core/core/src/worker/activities.rs +156 -29
  44. package/sdk-core/core/src/worker/client.rs +1 -0
  45. package/sdk-core/core/src/worker/mod.rs +132 -659
  46. package/sdk-core/core/src/{workflow → worker/workflow}/bridge.rs +1 -1
  47. package/sdk-core/core/src/{workflow → worker/workflow}/driven_workflow.rs +1 -1
  48. package/sdk-core/core/src/{workflow → worker/workflow}/history_update.rs +16 -2
  49. package/sdk-core/core/src/{workflow → worker/workflow}/machines/activity_state_machine.rs +39 -4
  50. package/sdk-core/core/src/{workflow → worker/workflow}/machines/cancel_external_state_machine.rs +5 -2
  51. package/sdk-core/core/src/{workflow → worker/workflow}/machines/cancel_workflow_state_machine.rs +1 -1
  52. package/sdk-core/core/src/{workflow → worker/workflow}/machines/child_workflow_state_machine.rs +2 -4
  53. package/sdk-core/core/src/{workflow → worker/workflow}/machines/complete_workflow_state_machine.rs +0 -0
  54. package/sdk-core/core/src/{workflow → worker/workflow}/machines/continue_as_new_workflow_state_machine.rs +1 -1
  55. package/sdk-core/core/src/{workflow → worker/workflow}/machines/fail_workflow_state_machine.rs +0 -0
  56. package/sdk-core/core/src/{workflow → worker/workflow}/machines/local_activity_state_machine.rs +2 -5
  57. package/sdk-core/core/src/{workflow → worker/workflow}/machines/mod.rs +1 -1
  58. package/sdk-core/core/src/{workflow → worker/workflow}/machines/mutable_side_effect_state_machine.rs +0 -0
  59. package/sdk-core/core/src/{workflow → worker/workflow}/machines/patch_state_machine.rs +1 -1
  60. package/sdk-core/core/src/{workflow → worker/workflow}/machines/side_effect_state_machine.rs +0 -0
  61. package/sdk-core/core/src/{workflow → worker/workflow}/machines/signal_external_state_machine.rs +4 -2
  62. package/sdk-core/core/src/{workflow → worker/workflow}/machines/timer_state_machine.rs +1 -2
  63. package/sdk-core/core/src/{workflow → worker/workflow}/machines/transition_coverage.rs +1 -1
  64. package/sdk-core/core/src/{workflow → worker/workflow}/machines/upsert_search_attributes_state_machine.rs +5 -7
  65. package/sdk-core/core/src/{workflow → worker/workflow}/machines/workflow_machines/local_acts.rs +2 -2
  66. package/sdk-core/core/src/{workflow → worker/workflow}/machines/workflow_machines.rs +40 -16
  67. package/sdk-core/core/src/{workflow → worker/workflow}/machines/workflow_task_state_machine.rs +0 -0
  68. package/sdk-core/core/src/worker/workflow/managed_run/managed_wf_test.rs +198 -0
  69. package/sdk-core/core/src/worker/workflow/managed_run.rs +627 -0
  70. package/sdk-core/core/src/worker/workflow/mod.rs +1115 -0
  71. package/sdk-core/core/src/worker/workflow/run_cache.rs +143 -0
  72. package/sdk-core/core/src/worker/workflow/wft_poller.rs +88 -0
  73. package/sdk-core/core/src/worker/workflow/workflow_stream.rs +936 -0
  74. package/sdk-core/core-api/src/errors.rs +3 -10
  75. package/sdk-core/core-api/src/lib.rs +2 -1
  76. package/sdk-core/core-api/src/worker.rs +26 -2
  77. package/sdk-core/etc/dynamic-config.yaml +2 -0
  78. package/sdk-core/integ-with-otel.sh +1 -1
  79. package/sdk-core/protos/api_upstream/Makefile +4 -4
  80. package/sdk-core/protos/api_upstream/api-linter.yaml +2 -0
  81. package/sdk-core/protos/api_upstream/buf.yaml +8 -9
  82. package/sdk-core/protos/api_upstream/temporal/api/cluster/v1/message.proto +83 -0
  83. package/sdk-core/protos/api_upstream/temporal/api/command/v1/message.proto +7 -1
  84. package/sdk-core/protos/api_upstream/temporal/api/enums/v1/cluster.proto +40 -0
  85. package/sdk-core/protos/api_upstream/temporal/api/enums/v1/failed_cause.proto +3 -0
  86. package/sdk-core/protos/api_upstream/temporal/api/enums/v1/reset.proto +3 -1
  87. package/sdk-core/protos/api_upstream/temporal/api/enums/v1/schedule.proto +60 -0
  88. package/sdk-core/protos/api_upstream/temporal/api/enums/v1/workflow.proto +3 -0
  89. package/sdk-core/protos/api_upstream/temporal/api/errordetails/v1/message.proto +32 -4
  90. package/sdk-core/protos/api_upstream/temporal/api/history/v1/message.proto +69 -19
  91. package/sdk-core/protos/api_upstream/temporal/api/namespace/v1/message.proto +13 -0
  92. package/sdk-core/protos/api_upstream/temporal/api/operatorservice/v1/request_response.proto +163 -0
  93. package/sdk-core/protos/api_upstream/temporal/api/operatorservice/v1/service.proto +97 -0
  94. package/sdk-core/protos/api_upstream/temporal/api/schedule/v1/message.proto +300 -0
  95. package/sdk-core/protos/api_upstream/temporal/api/workflow/v1/message.proto +25 -0
  96. package/sdk-core/protos/api_upstream/temporal/api/workflowservice/v1/request_response.proto +180 -3
  97. package/sdk-core/protos/api_upstream/temporal/api/workflowservice/v1/service.proto +53 -3
  98. package/sdk-core/protos/local/temporal/sdk/core/activity_result/activity_result.proto +2 -2
  99. package/sdk-core/protos/local/temporal/sdk/core/activity_task/activity_task.proto +6 -5
  100. package/sdk-core/protos/local/temporal/sdk/core/bridge/bridge.proto +27 -6
  101. package/sdk-core/protos/local/temporal/sdk/core/child_workflow/child_workflow.proto +2 -1
  102. package/sdk-core/protos/local/temporal/sdk/core/common/common.proto +0 -64
  103. package/sdk-core/protos/local/temporal/sdk/core/core_interface.proto +2 -1
  104. package/sdk-core/protos/local/temporal/sdk/core/workflow_activation/workflow_activation.proto +11 -8
  105. package/sdk-core/protos/local/temporal/sdk/core/workflow_commands/workflow_commands.proto +30 -25
  106. package/sdk-core/sdk/src/activity_context.rs +12 -5
  107. package/sdk-core/sdk/src/app_data.rs +37 -0
  108. package/sdk-core/sdk/src/lib.rs +76 -43
  109. package/sdk-core/sdk/src/workflow_context/options.rs +8 -6
  110. package/sdk-core/sdk/src/workflow_context.rs +14 -19
  111. package/sdk-core/sdk/src/workflow_future.rs +11 -6
  112. package/sdk-core/sdk-core-protos/src/history_builder.rs +19 -5
  113. package/sdk-core/sdk-core-protos/src/history_info.rs +11 -6
  114. package/sdk-core/sdk-core-protos/src/lib.rs +87 -176
  115. package/sdk-core/test-utils/src/histfetch.rs +1 -1
  116. package/sdk-core/test-utils/src/lib.rs +93 -77
  117. package/sdk-core/tests/integ_tests/client_tests.rs +2 -2
  118. package/sdk-core/tests/integ_tests/heartbeat_tests.rs +11 -9
  119. package/sdk-core/tests/integ_tests/polling_tests.rs +12 -0
  120. package/sdk-core/tests/integ_tests/queries_tests.rs +39 -22
  121. package/sdk-core/tests/integ_tests/workflow_tests/activities.rs +49 -4
  122. package/sdk-core/tests/integ_tests/workflow_tests/appdata_propagation.rs +61 -0
  123. package/sdk-core/tests/integ_tests/workflow_tests/cancel_wf.rs +1 -1
  124. package/sdk-core/tests/integ_tests/workflow_tests/local_activities.rs +74 -13
  125. package/sdk-core/tests/integ_tests/workflow_tests/replay.rs +19 -0
  126. package/sdk-core/tests/integ_tests/workflow_tests/resets.rs +1 -1
  127. package/sdk-core/tests/integ_tests/workflow_tests/upsert_search_attrs.rs +6 -3
  128. package/sdk-core/tests/integ_tests/workflow_tests.rs +10 -23
  129. package/sdk-core/tests/load_tests.rs +8 -3
  130. package/sdk-core/tests/main.rs +7 -3
  131. package/src/conversions.rs +149 -70
  132. package/src/errors.rs +10 -21
  133. package/src/lib.rs +400 -319
  134. package/sdk-core/core/src/pending_activations.rs +0 -173
  135. package/sdk-core/core/src/worker/wft_delivery.rs +0 -81
  136. package/sdk-core/core/src/workflow/mod.rs +0 -478
  137. package/sdk-core/core/src/workflow/workflow_tasks/cache_manager.rs +0 -194
  138. package/sdk-core/core/src/workflow/workflow_tasks/concurrency_manager.rs +0 -418
  139. package/sdk-core/core/src/workflow/workflow_tasks/mod.rs +0 -989
@@ -26,12 +26,11 @@ pub mod coresdk {
26
26
  tonic::include_proto!("coresdk");
27
27
 
28
28
  use crate::temporal::api::{
29
- common::v1::{ActivityType, Payloads, WorkflowExecution},
29
+ common::v1::{ActivityType, Payload, Payloads, WorkflowExecution},
30
30
  failure::v1::{failure::FailureInfo, ApplicationFailureInfo, Failure},
31
31
  workflowservice::v1::PollActivityTaskQueueResponse,
32
32
  };
33
33
  use activity_task::ActivityTask;
34
- use common::Payload;
35
34
  use serde::{Deserialize, Serialize};
36
35
  use std::{
37
36
  collections::HashMap,
@@ -79,12 +78,9 @@ pub mod coresdk {
79
78
  #[allow(clippy::module_inception)]
80
79
  pub mod activity_result {
81
80
  tonic::include_proto!("coresdk.activity_result");
82
- use super::{
83
- super::temporal::api::{
84
- common::v1::Payload as APIPayload,
85
- failure::v1::{failure, CanceledFailureInfo, Failure as APIFailure},
86
- },
87
- common::Payload,
81
+ use super::super::temporal::api::{
82
+ common::v1::Payload,
83
+ failure::v1::{failure, CanceledFailureInfo, Failure as APIFailure},
88
84
  };
89
85
  use crate::temporal::api::{enums::v1::TimeoutType, failure::v1::TimeoutFailureInfo};
90
86
  use activity_execution_result as aer;
@@ -175,13 +171,11 @@ pub mod coresdk {
175
171
  }
176
172
  }
177
173
 
178
- impl From<Result<APIPayload, APIFailure>> for ActivityExecutionResult {
179
- fn from(r: Result<APIPayload, APIFailure>) -> Self {
174
+ impl From<Result<Payload, APIFailure>> for ActivityExecutionResult {
175
+ fn from(r: Result<Payload, APIFailure>) -> Self {
180
176
  Self {
181
177
  status: match r {
182
- Ok(p) => Some(aer::Status::Completed(Success {
183
- result: Some(p.into()),
184
- })),
178
+ Ok(p) => Some(aer::Status::Completed(Success { result: Some(p) })),
185
179
  Err(f) => Some(aer::Status::Failed(Failure { failure: Some(f) })),
186
180
  },
187
181
  }
@@ -258,51 +252,9 @@ pub mod coresdk {
258
252
  use super::external_data::LocalActivityMarkerData;
259
253
  use crate::{
260
254
  coresdk::{AsJsonPayloadExt, IntoPayloadsExt},
261
- temporal::api::common::v1::{Payload as ApiPayload, Payloads},
255
+ temporal::api::common::v1::{Payload, Payloads},
262
256
  };
263
- use std::{
264
- collections::HashMap,
265
- fmt::{Display, Formatter},
266
- };
267
-
268
- impl<T> From<T> for Payload
269
- where
270
- T: AsRef<[u8]>,
271
- {
272
- fn from(v: T) -> Self {
273
- // TODO: Set better encodings, whole data converter deal. Setting anything for now
274
- // at least makes it show up in the web UI.
275
- let mut metadata = HashMap::new();
276
- metadata.insert("encoding".to_string(), b"binary/plain".to_vec());
277
- Self {
278
- metadata,
279
- data: v.as_ref().to_vec(),
280
- }
281
- }
282
- }
283
-
284
- impl Payload {
285
- // Is it's own function b/c asref causes implementation conflicts
286
- pub fn as_slice(&self) -> &[u8] {
287
- self.data.as_slice()
288
- }
289
- }
290
-
291
- impl Display for Payload {
292
- fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
293
- if self.data.len() > 64 {
294
- let mut windows = self.data.as_slice().windows(32);
295
- write!(
296
- f,
297
- "[{}..{}]",
298
- base64::encode(windows.next().unwrap_or_default()),
299
- base64::encode(windows.next_back().unwrap_or_default())
300
- )
301
- } else {
302
- write!(f, "[{}]", base64::encode(&self.data))
303
- }
304
- }
305
- }
257
+ use std::collections::HashMap;
306
258
 
307
259
  pub fn build_has_change_marker_details(
308
260
  patch_id: &str,
@@ -356,7 +308,7 @@ pub mod coresdk {
356
308
  /// map.
357
309
  pub fn extract_local_activity_marker_details(
358
310
  details: &mut HashMap<String, Payloads>,
359
- ) -> (Option<LocalActivityMarkerData>, Option<ApiPayload>) {
311
+ ) -> (Option<LocalActivityMarkerData>, Option<Payload>) {
360
312
  let data = extract_local_activity_marker_data(details);
361
313
  let result = details.remove("result").and_then(|mut p| p.payloads.pop());
362
314
  (data, result)
@@ -438,9 +390,8 @@ pub mod coresdk {
438
390
  pub mod workflow_activation {
439
391
  use crate::{
440
392
  coresdk::{
441
- common::{NamespacedWorkflowExecution, Payload},
442
- workflow_activation::remove_from_cache::EvictionReason,
443
- FromPayloadsExt,
393
+ common::NamespacedWorkflowExecution,
394
+ workflow_activation::remove_from_cache::EvictionReason, FromPayloadsExt,
444
395
  },
445
396
  temporal::api::{
446
397
  common::v1::Header,
@@ -468,6 +419,7 @@ pub mod coresdk {
468
419
  timestamp: None,
469
420
  run_id,
470
421
  is_replaying: false,
422
+ history_length: 0,
471
423
  jobs: vec![WorkflowActivationJob::from(
472
424
  workflow_activation_job::Variant::RemoveFromCache(RemoveFromCache {
473
425
  message,
@@ -477,21 +429,6 @@ pub mod coresdk {
477
429
  }
478
430
  }
479
431
 
480
- pub fn create_query_activation(
481
- run_id: String,
482
- queries: impl IntoIterator<Item = QueryWorkflow>,
483
- ) -> WorkflowActivation {
484
- WorkflowActivation {
485
- timestamp: None,
486
- run_id,
487
- is_replaying: false,
488
- jobs: queries
489
- .into_iter()
490
- .map(|qr| workflow_activation_job::Variant::QueryWorkflow(qr).into())
491
- .collect(),
492
- }
493
- }
494
-
495
432
  pub fn query_to_job(id: String, q: WorkflowQuery) -> QueryWorkflow {
496
433
  QueryWorkflow {
497
434
  query_id: id,
@@ -669,10 +606,7 @@ pub mod coresdk {
669
606
  randomness_seed,
670
607
  headers: match attrs.header {
671
608
  None => HashMap::new(),
672
- Some(Header { fields }) => fields
673
- .into_iter()
674
- .map(|(k, v)| (k, Payload::from(v)))
675
- .collect(),
609
+ Some(Header { fields }) => fields,
676
610
  },
677
611
  identity: attrs.identity,
678
612
  parent_workflow_info: attrs.parent_workflow_execution.map(|pe| {
@@ -834,7 +768,11 @@ pub mod coresdk {
834
768
 
835
769
  impl Display for UpsertWorkflowSearchAttributes {
836
770
  fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
837
- write!(f, "UpsertWorkflowSearchAttributes({})", self.seq) // todo: customize this better
771
+ write!(
772
+ f,
773
+ "UpsertWorkflowSearchAttributes({:?})",
774
+ self.search_attributes.keys()
775
+ )
838
776
  }
839
777
  }
840
778
 
@@ -1030,6 +968,14 @@ pub mod coresdk {
1030
968
  }
1031
969
  false
1032
970
  }
971
+
972
+ /// Returns true if the activation completion is a success with no commands
973
+ pub fn is_empty(&self) -> bool {
974
+ if let Some(workflow_activation_completion::Status::Successful(s)) = &self.status {
975
+ return s.commands.is_empty();
976
+ }
977
+ false
978
+ }
1033
979
  }
1034
980
 
1035
981
  /// Makes converting outgoing lang commands into [WorkflowActivationCompletion]s easier
@@ -1110,7 +1056,7 @@ pub mod coresdk {
1110
1056
  activity_task::Start {
1111
1057
  workflow_namespace: r.workflow_namespace,
1112
1058
  workflow_type: r.workflow_type.map_or_else(|| "".to_string(), |wt| wt.name),
1113
- workflow_execution: Some(common::WorkflowExecution {
1059
+ workflow_execution: Some(WorkflowExecution {
1114
1060
  workflow_id,
1115
1061
  run_id,
1116
1062
  }),
@@ -1146,15 +1092,6 @@ pub mod coresdk {
1146
1092
  }
1147
1093
  }
1148
1094
 
1149
- impl From<common::WorkflowExecution> for WorkflowExecution {
1150
- fn from(exc: common::WorkflowExecution) -> Self {
1151
- Self {
1152
- workflow_id: exc.workflow_id,
1153
- run_id: exc.run_id,
1154
- }
1155
- }
1156
- }
1157
-
1158
1095
  impl Failure {
1159
1096
  pub fn is_timeout(&self) -> bool {
1160
1097
  matches!(self.failure_info, Some(FailureInfo::TimeoutFailureInfo(_)))
@@ -1172,6 +1109,19 @@ pub mod coresdk {
1172
1109
  ..Default::default()
1173
1110
  }
1174
1111
  }
1112
+
1113
+ /// Extracts an ApplicationFailureInfo from a Failure instance if it exists
1114
+ pub fn maybe_application_failure(&self) -> Option<&ApplicationFailureInfo> {
1115
+ if let Failure {
1116
+ failure_info: Some(FailureInfo::ApplicationFailureInfo(f)),
1117
+ ..
1118
+ } = self
1119
+ {
1120
+ Some(f)
1121
+ } else {
1122
+ None
1123
+ }
1124
+ }
1175
1125
  }
1176
1126
 
1177
1127
  impl Display for Failure {
@@ -1234,30 +1184,12 @@ pub mod coresdk {
1234
1184
  }
1235
1185
  }
1236
1186
 
1237
- impl From<common::Payload> for super::temporal::api::common::v1::Payload {
1238
- fn from(p: Payload) -> Self {
1239
- Self {
1240
- metadata: p.metadata,
1241
- data: p.data,
1242
- }
1243
- }
1244
- }
1245
-
1246
- impl From<super::temporal::api::common::v1::Payload> for common::Payload {
1247
- fn from(p: super::temporal::api::common::v1::Payload) -> Self {
1248
- Self {
1249
- metadata: p.metadata,
1250
- data: p.data,
1251
- }
1252
- }
1253
- }
1254
-
1255
1187
  pub trait FromPayloadsExt {
1256
1188
  fn from_payloads(p: Option<Payloads>) -> Self;
1257
1189
  }
1258
1190
  impl<T> FromPayloadsExt for T
1259
1191
  where
1260
- T: FromIterator<common::Payload>,
1192
+ T: FromIterator<Payload>,
1261
1193
  {
1262
1194
  fn from_payloads(p: Option<Payloads>) -> Self {
1263
1195
  match p {
@@ -1272,7 +1204,7 @@ pub mod coresdk {
1272
1204
  }
1273
1205
  impl<T> IntoPayloadsExt for T
1274
1206
  where
1275
- T: IntoIterator<Item = common::Payload>,
1207
+ T: IntoIterator<Item = Payload>,
1276
1208
  {
1277
1209
  fn into_payloads(self) -> Option<Payloads> {
1278
1210
  let mut iterd = self.into_iter().peekable();
@@ -1286,27 +1218,9 @@ pub mod coresdk {
1286
1218
  }
1287
1219
  }
1288
1220
 
1289
- impl From<common::Payload> for Payloads {
1221
+ impl From<Payload> for Payloads {
1290
1222
  fn from(p: Payload) -> Self {
1291
- Self {
1292
- payloads: vec![p.into()],
1293
- }
1294
- }
1295
- }
1296
-
1297
- impl<T> From<T> for super::temporal::api::common::v1::Payload
1298
- where
1299
- T: AsRef<[u8]>,
1300
- {
1301
- fn from(v: T) -> Self {
1302
- // TODO: Set better encodings, whole data converter deal. Setting anything for now
1303
- // at least makes it show up in the web UI.
1304
- let mut metadata = HashMap::new();
1305
- metadata.insert("encoding".to_string(), b"binary/plain".to_vec());
1306
- Self {
1307
- metadata,
1308
- data: v.as_ref().to_vec(),
1309
- }
1223
+ Self { payloads: vec![p] }
1310
1224
  }
1311
1225
  }
1312
1226
 
@@ -1370,13 +1284,13 @@ pub mod coresdk {
1370
1284
  }
1371
1285
  }
1372
1286
 
1373
- /// Errors when converting from a [Payloads] api proto to our internal [common::Payload]
1287
+ /// Errors when converting from a [Payloads] api proto to our internal [Payload]
1374
1288
  #[derive(derive_more::Display, Debug)]
1375
1289
  pub enum PayloadsToPayloadError {
1376
1290
  MoreThanOnePayload,
1377
1291
  NoPayload,
1378
1292
  }
1379
- impl TryFrom<Payloads> for common::Payload {
1293
+ impl TryFrom<Payloads> for Payload {
1380
1294
  type Error = PayloadsToPayloadError;
1381
1295
 
1382
1296
  fn try_from(mut v: Payloads) -> Result<Self, Self::Error> {
@@ -1384,7 +1298,7 @@ pub mod coresdk {
1384
1298
  None => Err(PayloadsToPayloadError::NoPayload),
1385
1299
  Some(p) => {
1386
1300
  if v.payloads.is_empty() {
1387
- Ok(p.into())
1301
+ Ok(p)
1388
1302
  } else {
1389
1303
  Err(PayloadsToPayloadError::MoreThanOnePayload)
1390
1304
  }
@@ -1504,7 +1418,6 @@ pub mod temporal {
1504
1418
  activity_type: Some(ActivityType {
1505
1419
  name: s.activity_type,
1506
1420
  }),
1507
- namespace: s.namespace,
1508
1421
  task_queue: Some(s.task_queue.into()),
1509
1422
  header: Some(s.headers.into()),
1510
1423
  input: s.arguments.into_payloads(),
@@ -1513,6 +1426,7 @@ pub mod temporal {
1513
1426
  start_to_close_timeout: s.start_to_close_timeout,
1514
1427
  heartbeat_timeout: s.heartbeat_timeout,
1515
1428
  retry_policy: s.retry_policy.map(Into::into),
1429
+ request_eager_execution: !s.do_not_eagerly_execute,
1516
1430
  },
1517
1431
  )
1518
1432
  }
@@ -1609,25 +1523,48 @@ pub mod temporal {
1609
1523
  }
1610
1524
  pub mod common {
1611
1525
  pub mod v1 {
1612
- use crate::coresdk::common;
1613
1526
  use std::{
1614
1527
  collections::HashMap,
1615
1528
  fmt::{Display, Formatter},
1616
1529
  };
1617
1530
  tonic::include_proto!("temporal.api.common.v1");
1618
1531
 
1619
- impl From<HashMap<String, common::Payload>> for Header {
1620
- fn from(h: HashMap<String, common::Payload>) -> Self {
1532
+ impl<T> From<T> for Payload
1533
+ where
1534
+ T: AsRef<[u8]>,
1535
+ {
1536
+ fn from(v: T) -> Self {
1537
+ // TODO: Set better encodings, whole data converter deal. Setting anything
1538
+ // for now at least makes it show up in the web UI.
1539
+ let mut metadata = HashMap::new();
1540
+ metadata.insert("encoding".to_string(), b"binary/plain".to_vec());
1621
1541
  Self {
1622
- fields: h.into_iter().map(|(k, v)| (k, v.into())).collect(),
1542
+ metadata,
1543
+ data: v.as_ref().to_vec(),
1623
1544
  }
1624
1545
  }
1625
1546
  }
1626
1547
 
1548
+ impl Payload {
1549
+ // Is its own function b/c asref causes implementation conflicts
1550
+ pub fn as_slice(&self) -> &[u8] {
1551
+ self.data.as_slice()
1552
+ }
1553
+ }
1554
+
1627
1555
  impl Display for Payload {
1628
1556
  fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
1629
- // Attempt to render payloads as strings
1630
- write!(f, "{}", std::str::from_utf8(&self.data).unwrap_or_default())
1557
+ if self.data.len() > 64 {
1558
+ let mut windows = self.data.as_slice().windows(32);
1559
+ write!(
1560
+ f,
1561
+ "[{}..{}]",
1562
+ base64::encode(windows.next().unwrap_or_default()),
1563
+ base64::encode(windows.next_back().unwrap_or_default())
1564
+ )
1565
+ } else {
1566
+ write!(f, "[{}]", base64::encode(&self.data))
1567
+ }
1631
1568
  }
1632
1569
  }
1633
1570
 
@@ -1642,51 +1579,19 @@ pub mod temporal {
1642
1579
  }
1643
1580
  }
1644
1581
 
1645
- impl From<Header> for HashMap<String, common::Payload> {
1582
+ impl From<Header> for HashMap<String, Payload> {
1646
1583
  fn from(h: Header) -> Self {
1647
1584
  h.fields.into_iter().map(|(k, v)| (k, v.into())).collect()
1648
1585
  }
1649
1586
  }
1650
1587
 
1651
- impl From<HashMap<String, common::Payload>> for Memo {
1652
- fn from(h: HashMap<String, common::Payload>) -> Self {
1653
- Self {
1654
- fields: h.into_iter().map(|(k, v)| (k, v.into())).collect(),
1655
- }
1656
- }
1657
- }
1658
-
1659
- impl From<HashMap<String, common::Payload>> for SearchAttributes {
1660
- fn from(h: HashMap<String, common::Payload>) -> Self {
1588
+ impl From<HashMap<String, Payload>> for SearchAttributes {
1589
+ fn from(h: HashMap<String, Payload>) -> Self {
1661
1590
  Self {
1662
1591
  indexed_fields: h.into_iter().map(|(k, v)| (k, v.into())).collect(),
1663
1592
  }
1664
1593
  }
1665
1594
  }
1666
-
1667
- impl From<common::RetryPolicy> for RetryPolicy {
1668
- fn from(r: common::RetryPolicy) -> Self {
1669
- Self {
1670
- initial_interval: r.initial_interval,
1671
- backoff_coefficient: r.backoff_coefficient,
1672
- maximum_interval: r.maximum_interval,
1673
- maximum_attempts: r.maximum_attempts,
1674
- non_retryable_error_types: r.non_retryable_error_types,
1675
- }
1676
- }
1677
- }
1678
-
1679
- impl From<RetryPolicy> for common::RetryPolicy {
1680
- fn from(r: RetryPolicy) -> Self {
1681
- Self {
1682
- initial_interval: r.initial_interval,
1683
- backoff_coefficient: r.backoff_coefficient,
1684
- maximum_interval: r.maximum_interval,
1685
- maximum_attempts: r.maximum_attempts,
1686
- non_retryable_error_types: r.non_retryable_error_types,
1687
- }
1688
- }
1689
- }
1690
1595
  }
1691
1596
  }
1692
1597
  pub mod history {
@@ -1823,6 +1728,12 @@ pub mod temporal {
1823
1728
  }
1824
1729
  }
1825
1730
 
1731
+ pub mod schedule {
1732
+ pub mod v1 {
1733
+ tonic::include_proto!("temporal.api.schedule.v1");
1734
+ }
1735
+ }
1736
+
1826
1737
  pub mod taskqueue {
1827
1738
  pub mod v1 {
1828
1739
  use crate::temporal::api::enums::v1::TaskQueueKind;
@@ -11,7 +11,7 @@ use temporal_sdk_core_test_utils::get_integ_server_options;
11
11
  #[tokio::main]
12
12
  async fn main() -> Result<(), anyhow::Error> {
13
13
  let gw_opts = get_integ_server_options();
14
- let client = gw_opts.connect("default", None).await?;
14
+ let client = gw_opts.connect("default", None, None).await?;
15
15
  let wf_id = std::env::args()
16
16
  .nth(1)
17
17
  .expect("must provide workflow id as only argument");