temporalio 0.0.0 → 0.0.2
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.
- checksums.yaml +4 -4
- data/README.md +301 -0
- data/bridge/Cargo.lock +2888 -0
- data/bridge/Cargo.toml +27 -0
- data/bridge/sdk-core/ARCHITECTURE.md +76 -0
- data/bridge/sdk-core/Cargo.lock +2606 -0
- data/bridge/sdk-core/Cargo.toml +2 -0
- data/bridge/sdk-core/LICENSE.txt +23 -0
- data/bridge/sdk-core/README.md +104 -0
- data/bridge/sdk-core/arch_docs/diagrams/README.md +10 -0
- data/bridge/sdk-core/arch_docs/diagrams/sticky_queues.puml +40 -0
- data/bridge/sdk-core/arch_docs/diagrams/workflow_internals.svg +1 -0
- data/bridge/sdk-core/arch_docs/sticky_queues.md +51 -0
- data/bridge/sdk-core/client/Cargo.toml +40 -0
- data/bridge/sdk-core/client/LICENSE.txt +23 -0
- data/bridge/sdk-core/client/src/lib.rs +1286 -0
- data/bridge/sdk-core/client/src/metrics.rs +165 -0
- data/bridge/sdk-core/client/src/raw.rs +932 -0
- data/bridge/sdk-core/client/src/retry.rs +751 -0
- data/bridge/sdk-core/client/src/workflow_handle/mod.rs +185 -0
- data/bridge/sdk-core/core/Cargo.toml +116 -0
- data/bridge/sdk-core/core/LICENSE.txt +23 -0
- data/bridge/sdk-core/core/benches/workflow_replay.rs +76 -0
- data/bridge/sdk-core/core/src/abstractions.rs +166 -0
- data/bridge/sdk-core/core/src/core_tests/activity_tasks.rs +1014 -0
- data/bridge/sdk-core/core/src/core_tests/child_workflows.rs +221 -0
- data/bridge/sdk-core/core/src/core_tests/determinism.rs +107 -0
- data/bridge/sdk-core/core/src/core_tests/local_activities.rs +925 -0
- data/bridge/sdk-core/core/src/core_tests/mod.rs +100 -0
- data/bridge/sdk-core/core/src/core_tests/queries.rs +894 -0
- data/bridge/sdk-core/core/src/core_tests/replay_flag.rs +65 -0
- data/bridge/sdk-core/core/src/core_tests/workers.rs +259 -0
- data/bridge/sdk-core/core/src/core_tests/workflow_cancels.rs +124 -0
- data/bridge/sdk-core/core/src/core_tests/workflow_tasks.rs +2090 -0
- data/bridge/sdk-core/core/src/ephemeral_server/mod.rs +515 -0
- data/bridge/sdk-core/core/src/lib.rs +282 -0
- data/bridge/sdk-core/core/src/pollers/mod.rs +54 -0
- data/bridge/sdk-core/core/src/pollers/poll_buffer.rs +297 -0
- data/bridge/sdk-core/core/src/protosext/mod.rs +428 -0
- data/bridge/sdk-core/core/src/replay/mod.rs +215 -0
- data/bridge/sdk-core/core/src/retry_logic.rs +202 -0
- data/bridge/sdk-core/core/src/telemetry/log_export.rs +190 -0
- data/bridge/sdk-core/core/src/telemetry/metrics.rs +428 -0
- data/bridge/sdk-core/core/src/telemetry/mod.rs +407 -0
- data/bridge/sdk-core/core/src/telemetry/prometheus_server.rs +78 -0
- data/bridge/sdk-core/core/src/test_help/mod.rs +889 -0
- data/bridge/sdk-core/core/src/worker/activities/activity_heartbeat_manager.rs +580 -0
- data/bridge/sdk-core/core/src/worker/activities/local_activities.rs +1048 -0
- data/bridge/sdk-core/core/src/worker/activities.rs +481 -0
- data/bridge/sdk-core/core/src/worker/client/mocks.rs +87 -0
- data/bridge/sdk-core/core/src/worker/client.rs +373 -0
- data/bridge/sdk-core/core/src/worker/mod.rs +570 -0
- data/bridge/sdk-core/core/src/worker/workflow/bridge.rs +37 -0
- data/bridge/sdk-core/core/src/worker/workflow/driven_workflow.rs +101 -0
- data/bridge/sdk-core/core/src/worker/workflow/history_update.rs +532 -0
- data/bridge/sdk-core/core/src/worker/workflow/machines/activity_state_machine.rs +907 -0
- data/bridge/sdk-core/core/src/worker/workflow/machines/cancel_external_state_machine.rs +294 -0
- data/bridge/sdk-core/core/src/worker/workflow/machines/cancel_workflow_state_machine.rs +167 -0
- data/bridge/sdk-core/core/src/worker/workflow/machines/child_workflow_state_machine.rs +858 -0
- data/bridge/sdk-core/core/src/worker/workflow/machines/complete_workflow_state_machine.rs +136 -0
- data/bridge/sdk-core/core/src/worker/workflow/machines/continue_as_new_workflow_state_machine.rs +157 -0
- data/bridge/sdk-core/core/src/worker/workflow/machines/fail_workflow_state_machine.rs +129 -0
- data/bridge/sdk-core/core/src/worker/workflow/machines/local_activity_state_machine.rs +1450 -0
- data/bridge/sdk-core/core/src/worker/workflow/machines/mod.rs +316 -0
- data/bridge/sdk-core/core/src/worker/workflow/machines/modify_workflow_properties_state_machine.rs +178 -0
- data/bridge/sdk-core/core/src/worker/workflow/machines/patch_state_machine.rs +708 -0
- data/bridge/sdk-core/core/src/worker/workflow/machines/signal_external_state_machine.rs +439 -0
- data/bridge/sdk-core/core/src/worker/workflow/machines/timer_state_machine.rs +435 -0
- data/bridge/sdk-core/core/src/worker/workflow/machines/transition_coverage.rs +175 -0
- data/bridge/sdk-core/core/src/worker/workflow/machines/upsert_search_attributes_state_machine.rs +242 -0
- data/bridge/sdk-core/core/src/worker/workflow/machines/workflow_machines/local_acts.rs +96 -0
- data/bridge/sdk-core/core/src/worker/workflow/machines/workflow_machines.rs +1200 -0
- data/bridge/sdk-core/core/src/worker/workflow/machines/workflow_task_state_machine.rs +272 -0
- data/bridge/sdk-core/core/src/worker/workflow/managed_run/managed_wf_test.rs +198 -0
- data/bridge/sdk-core/core/src/worker/workflow/managed_run.rs +655 -0
- data/bridge/sdk-core/core/src/worker/workflow/mod.rs +1200 -0
- data/bridge/sdk-core/core/src/worker/workflow/run_cache.rs +145 -0
- data/bridge/sdk-core/core/src/worker/workflow/wft_poller.rs +88 -0
- data/bridge/sdk-core/core/src/worker/workflow/workflow_stream.rs +985 -0
- data/bridge/sdk-core/core-api/Cargo.toml +32 -0
- data/bridge/sdk-core/core-api/LICENSE.txt +23 -0
- data/bridge/sdk-core/core-api/src/errors.rs +95 -0
- data/bridge/sdk-core/core-api/src/lib.rs +109 -0
- data/bridge/sdk-core/core-api/src/telemetry.rs +147 -0
- data/bridge/sdk-core/core-api/src/worker.rs +148 -0
- data/bridge/sdk-core/etc/deps.svg +162 -0
- data/bridge/sdk-core/etc/dynamic-config.yaml +2 -0
- data/bridge/sdk-core/etc/otel-collector-config.yaml +36 -0
- data/bridge/sdk-core/etc/prometheus.yaml +6 -0
- data/bridge/sdk-core/etc/regen-depgraph.sh +5 -0
- data/bridge/sdk-core/fsm/Cargo.toml +18 -0
- data/bridge/sdk-core/fsm/LICENSE.txt +23 -0
- data/bridge/sdk-core/fsm/README.md +3 -0
- data/bridge/sdk-core/fsm/rustfsm_procmacro/Cargo.toml +27 -0
- data/bridge/sdk-core/fsm/rustfsm_procmacro/LICENSE.txt +23 -0
- data/bridge/sdk-core/fsm/rustfsm_procmacro/src/lib.rs +647 -0
- data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/progress.rs +8 -0
- data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/dupe_transitions_fail.rs +18 -0
- data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/dupe_transitions_fail.stderr +12 -0
- data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/dynamic_dest_pass.rs +41 -0
- data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/forgot_name_fail.rs +14 -0
- data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/forgot_name_fail.stderr +11 -0
- data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/handler_arg_pass.rs +32 -0
- data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/handler_pass.rs +31 -0
- data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/medium_complex_pass.rs +46 -0
- data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/no_handle_conversions_require_into_fail.rs +29 -0
- data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/no_handle_conversions_require_into_fail.stderr +12 -0
- data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/simple_pass.rs +32 -0
- data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/struct_event_variant_fail.rs +18 -0
- data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/struct_event_variant_fail.stderr +5 -0
- data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/tuple_more_item_event_variant_fail.rs +11 -0
- data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/tuple_more_item_event_variant_fail.stderr +5 -0
- data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/tuple_zero_item_event_variant_fail.rs +11 -0
- data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/tuple_zero_item_event_variant_fail.stderr +5 -0
- data/bridge/sdk-core/fsm/rustfsm_trait/Cargo.toml +14 -0
- data/bridge/sdk-core/fsm/rustfsm_trait/LICENSE.txt +23 -0
- data/bridge/sdk-core/fsm/rustfsm_trait/src/lib.rs +249 -0
- data/bridge/sdk-core/fsm/src/lib.rs +2 -0
- data/bridge/sdk-core/histories/evict_while_la_running_no_interference-23_history.bin +0 -0
- data/bridge/sdk-core/histories/evict_while_la_running_no_interference-85_history.bin +0 -0
- data/bridge/sdk-core/histories/fail_wf_task.bin +0 -0
- data/bridge/sdk-core/histories/timer_workflow_history.bin +0 -0
- data/bridge/sdk-core/integ-with-otel.sh +7 -0
- data/bridge/sdk-core/protos/api_upstream/README.md +9 -0
- data/bridge/sdk-core/protos/api_upstream/api-linter.yaml +40 -0
- data/bridge/sdk-core/protos/api_upstream/buf.yaml +9 -0
- data/bridge/sdk-core/protos/api_upstream/build/go.mod +7 -0
- data/bridge/sdk-core/protos/api_upstream/build/go.sum +5 -0
- data/bridge/sdk-core/protos/api_upstream/build/tools.go +29 -0
- data/bridge/sdk-core/protos/api_upstream/dependencies/gogoproto/gogo.proto +141 -0
- data/bridge/sdk-core/protos/api_upstream/go.mod +6 -0
- data/bridge/sdk-core/protos/api_upstream/temporal/api/batch/v1/message.proto +89 -0
- data/bridge/sdk-core/protos/api_upstream/temporal/api/command/v1/message.proto +260 -0
- data/bridge/sdk-core/protos/api_upstream/temporal/api/common/v1/message.proto +112 -0
- data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/batch_operation.proto +47 -0
- data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/command_type.proto +57 -0
- data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/common.proto +56 -0
- data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/event_type.proto +170 -0
- data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/failed_cause.proto +118 -0
- data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/interaction_type.proto +39 -0
- data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/namespace.proto +51 -0
- data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/query.proto +50 -0
- data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/reset.proto +41 -0
- data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/schedule.proto +60 -0
- data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/task_queue.proto +59 -0
- data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/update.proto +40 -0
- data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/workflow.proto +122 -0
- data/bridge/sdk-core/protos/api_upstream/temporal/api/errordetails/v1/message.proto +108 -0
- data/bridge/sdk-core/protos/api_upstream/temporal/api/failure/v1/message.proto +114 -0
- data/bridge/sdk-core/protos/api_upstream/temporal/api/filter/v1/message.proto +56 -0
- data/bridge/sdk-core/protos/api_upstream/temporal/api/history/v1/message.proto +758 -0
- data/bridge/sdk-core/protos/api_upstream/temporal/api/interaction/v1/message.proto +87 -0
- data/bridge/sdk-core/protos/api_upstream/temporal/api/namespace/v1/message.proto +97 -0
- data/bridge/sdk-core/protos/api_upstream/temporal/api/operatorservice/v1/request_response.proto +121 -0
- data/bridge/sdk-core/protos/api_upstream/temporal/api/operatorservice/v1/service.proto +80 -0
- data/bridge/sdk-core/protos/api_upstream/temporal/api/query/v1/message.proto +61 -0
- data/bridge/sdk-core/protos/api_upstream/temporal/api/replication/v1/message.proto +55 -0
- data/bridge/sdk-core/protos/api_upstream/temporal/api/schedule/v1/message.proto +379 -0
- data/bridge/sdk-core/protos/api_upstream/temporal/api/taskqueue/v1/message.proto +108 -0
- data/bridge/sdk-core/protos/api_upstream/temporal/api/version/v1/message.proto +59 -0
- data/bridge/sdk-core/protos/api_upstream/temporal/api/workflow/v1/message.proto +146 -0
- data/bridge/sdk-core/protos/api_upstream/temporal/api/workflowservice/v1/request_response.proto +1168 -0
- data/bridge/sdk-core/protos/api_upstream/temporal/api/workflowservice/v1/service.proto +415 -0
- data/bridge/sdk-core/protos/grpc/health/v1/health.proto +63 -0
- data/bridge/sdk-core/protos/local/temporal/sdk/core/activity_result/activity_result.proto +78 -0
- data/bridge/sdk-core/protos/local/temporal/sdk/core/activity_task/activity_task.proto +79 -0
- data/bridge/sdk-core/protos/local/temporal/sdk/core/child_workflow/child_workflow.proto +77 -0
- data/bridge/sdk-core/protos/local/temporal/sdk/core/common/common.proto +15 -0
- data/bridge/sdk-core/protos/local/temporal/sdk/core/core_interface.proto +30 -0
- data/bridge/sdk-core/protos/local/temporal/sdk/core/external_data/external_data.proto +30 -0
- data/bridge/sdk-core/protos/local/temporal/sdk/core/workflow_activation/workflow_activation.proto +263 -0
- data/bridge/sdk-core/protos/local/temporal/sdk/core/workflow_commands/workflow_commands.proto +304 -0
- data/bridge/sdk-core/protos/local/temporal/sdk/core/workflow_completion/workflow_completion.proto +29 -0
- data/bridge/sdk-core/protos/testsrv_upstream/api-linter.yaml +38 -0
- data/bridge/sdk-core/protos/testsrv_upstream/buf.yaml +13 -0
- data/bridge/sdk-core/protos/testsrv_upstream/dependencies/gogoproto/gogo.proto +141 -0
- data/bridge/sdk-core/protos/testsrv_upstream/temporal/api/testservice/v1/request_response.proto +63 -0
- data/bridge/sdk-core/protos/testsrv_upstream/temporal/api/testservice/v1/service.proto +90 -0
- data/bridge/sdk-core/rustfmt.toml +1 -0
- data/bridge/sdk-core/sdk/Cargo.toml +47 -0
- data/bridge/sdk-core/sdk/LICENSE.txt +23 -0
- data/bridge/sdk-core/sdk/src/activity_context.rs +230 -0
- data/bridge/sdk-core/sdk/src/app_data.rs +37 -0
- data/bridge/sdk-core/sdk/src/interceptors.rs +50 -0
- data/bridge/sdk-core/sdk/src/lib.rs +794 -0
- data/bridge/sdk-core/sdk/src/payload_converter.rs +11 -0
- data/bridge/sdk-core/sdk/src/workflow_context/options.rs +295 -0
- data/bridge/sdk-core/sdk/src/workflow_context.rs +694 -0
- data/bridge/sdk-core/sdk/src/workflow_future.rs +499 -0
- data/bridge/sdk-core/sdk-core-protos/Cargo.toml +30 -0
- data/bridge/sdk-core/sdk-core-protos/LICENSE.txt +23 -0
- data/bridge/sdk-core/sdk-core-protos/build.rs +107 -0
- data/bridge/sdk-core/sdk-core-protos/src/constants.rs +7 -0
- data/bridge/sdk-core/sdk-core-protos/src/history_builder.rs +544 -0
- data/bridge/sdk-core/sdk-core-protos/src/history_info.rs +230 -0
- data/bridge/sdk-core/sdk-core-protos/src/lib.rs +1970 -0
- data/bridge/sdk-core/sdk-core-protos/src/task_token.rs +38 -0
- data/bridge/sdk-core/sdk-core-protos/src/utilities.rs +14 -0
- data/bridge/sdk-core/test-utils/Cargo.toml +36 -0
- data/bridge/sdk-core/test-utils/src/canned_histories.rs +1579 -0
- data/bridge/sdk-core/test-utils/src/histfetch.rs +28 -0
- data/bridge/sdk-core/test-utils/src/lib.rs +650 -0
- data/bridge/sdk-core/tests/integ_tests/client_tests.rs +36 -0
- data/bridge/sdk-core/tests/integ_tests/ephemeral_server_tests.rs +128 -0
- data/bridge/sdk-core/tests/integ_tests/heartbeat_tests.rs +221 -0
- data/bridge/sdk-core/tests/integ_tests/metrics_tests.rs +37 -0
- data/bridge/sdk-core/tests/integ_tests/polling_tests.rs +133 -0
- data/bridge/sdk-core/tests/integ_tests/queries_tests.rs +437 -0
- data/bridge/sdk-core/tests/integ_tests/visibility_tests.rs +93 -0
- data/bridge/sdk-core/tests/integ_tests/workflow_tests/activities.rs +878 -0
- data/bridge/sdk-core/tests/integ_tests/workflow_tests/appdata_propagation.rs +61 -0
- data/bridge/sdk-core/tests/integ_tests/workflow_tests/cancel_external.rs +59 -0
- data/bridge/sdk-core/tests/integ_tests/workflow_tests/cancel_wf.rs +58 -0
- data/bridge/sdk-core/tests/integ_tests/workflow_tests/child_workflows.rs +50 -0
- data/bridge/sdk-core/tests/integ_tests/workflow_tests/continue_as_new.rs +60 -0
- data/bridge/sdk-core/tests/integ_tests/workflow_tests/determinism.rs +54 -0
- data/bridge/sdk-core/tests/integ_tests/workflow_tests/local_activities.rs +788 -0
- data/bridge/sdk-core/tests/integ_tests/workflow_tests/modify_wf_properties.rs +53 -0
- data/bridge/sdk-core/tests/integ_tests/workflow_tests/patches.rs +113 -0
- data/bridge/sdk-core/tests/integ_tests/workflow_tests/replay.rs +223 -0
- data/bridge/sdk-core/tests/integ_tests/workflow_tests/resets.rs +93 -0
- data/bridge/sdk-core/tests/integ_tests/workflow_tests/signals.rs +167 -0
- data/bridge/sdk-core/tests/integ_tests/workflow_tests/stickyness.rs +99 -0
- data/bridge/sdk-core/tests/integ_tests/workflow_tests/timers.rs +131 -0
- data/bridge/sdk-core/tests/integ_tests/workflow_tests/upsert_search_attrs.rs +75 -0
- data/bridge/sdk-core/tests/integ_tests/workflow_tests.rs +597 -0
- data/bridge/sdk-core/tests/load_tests.rs +191 -0
- data/bridge/sdk-core/tests/main.rs +113 -0
- data/bridge/sdk-core/tests/runner.rs +93 -0
- data/bridge/src/connection.rs +186 -0
- data/bridge/src/lib.rs +239 -0
- data/bridge/src/runtime.rs +54 -0
- data/bridge/src/worker.rs +124 -0
- data/ext/Rakefile +9 -0
- data/lib/bridge.so +0 -0
- data/lib/gen/dependencies/gogoproto/gogo_pb.rb +14 -0
- data/lib/gen/temporal/api/batch/v1/message_pb.rb +50 -0
- data/lib/gen/temporal/api/command/v1/message_pb.rb +174 -0
- data/lib/gen/temporal/api/common/v1/message_pb.rb +69 -0
- data/lib/gen/temporal/api/enums/v1/batch_operation_pb.rb +33 -0
- data/lib/gen/temporal/api/enums/v1/command_type_pb.rb +39 -0
- data/lib/gen/temporal/api/enums/v1/common_pb.rb +42 -0
- data/lib/gen/temporal/api/enums/v1/event_type_pb.rb +68 -0
- data/lib/gen/temporal/api/enums/v1/failed_cause_pb.rb +77 -0
- data/lib/gen/temporal/api/enums/v1/interaction_type_pb.rb +25 -0
- data/lib/gen/temporal/api/enums/v1/namespace_pb.rb +37 -0
- data/lib/gen/temporal/api/enums/v1/query_pb.rb +31 -0
- data/lib/gen/temporal/api/enums/v1/reset_pb.rb +24 -0
- data/lib/gen/temporal/api/enums/v1/schedule_pb.rb +28 -0
- data/lib/gen/temporal/api/enums/v1/task_queue_pb.rb +30 -0
- data/lib/gen/temporal/api/enums/v1/update_pb.rb +23 -0
- data/lib/gen/temporal/api/enums/v1/workflow_pb.rb +89 -0
- data/lib/gen/temporal/api/errordetails/v1/message_pb.rb +84 -0
- data/lib/gen/temporal/api/failure/v1/message_pb.rb +83 -0
- data/lib/gen/temporal/api/filter/v1/message_pb.rb +40 -0
- data/lib/gen/temporal/api/history/v1/message_pb.rb +490 -0
- data/lib/gen/temporal/api/interaction/v1/message_pb.rb +49 -0
- data/lib/gen/temporal/api/namespace/v1/message_pb.rb +63 -0
- data/lib/gen/temporal/api/operatorservice/v1/request_response_pb.rb +85 -0
- data/lib/gen/temporal/api/operatorservice/v1/service_pb.rb +20 -0
- data/lib/gen/temporal/api/query/v1/message_pb.rb +38 -0
- data/lib/gen/temporal/api/replication/v1/message_pb.rb +37 -0
- data/lib/gen/temporal/api/schedule/v1/message_pb.rb +149 -0
- data/lib/gen/temporal/api/taskqueue/v1/message_pb.rb +73 -0
- data/lib/gen/temporal/api/version/v1/message_pb.rb +41 -0
- data/lib/gen/temporal/api/workflow/v1/message_pb.rb +111 -0
- data/lib/gen/temporal/api/workflowservice/v1/request_response_pb.rb +788 -0
- data/lib/gen/temporal/api/workflowservice/v1/service_pb.rb +20 -0
- data/lib/gen/temporal/sdk/core/activity_result/activity_result_pb.rb +58 -0
- data/lib/gen/temporal/sdk/core/activity_task/activity_task_pb.rb +57 -0
- data/lib/gen/temporal/sdk/core/bridge/bridge_pb.rb +222 -0
- data/lib/gen/temporal/sdk/core/child_workflow/child_workflow_pb.rb +57 -0
- data/lib/gen/temporal/sdk/core/common/common_pb.rb +22 -0
- data/lib/gen/temporal/sdk/core/core_interface_pb.rb +34 -0
- data/lib/gen/temporal/sdk/core/external_data/external_data_pb.rb +27 -0
- data/lib/gen/temporal/sdk/core/workflow_activation/workflow_activation_pb.rb +165 -0
- data/lib/gen/temporal/sdk/core/workflow_commands/workflow_commands_pb.rb +196 -0
- data/lib/gen/temporal/sdk/core/workflow_completion/workflow_completion_pb.rb +34 -0
- data/lib/temporalio/activity/context.rb +97 -0
- data/lib/temporalio/activity/info.rb +67 -0
- data/lib/temporalio/activity.rb +85 -0
- data/lib/temporalio/bridge/error.rb +8 -0
- data/lib/temporalio/bridge.rb +14 -0
- data/lib/temporalio/client/implementation.rb +340 -0
- data/lib/temporalio/client/workflow_handle.rb +243 -0
- data/lib/temporalio/client.rb +131 -0
- data/lib/temporalio/connection.rb +751 -0
- data/lib/temporalio/data_converter.rb +191 -0
- data/lib/temporalio/error/failure.rb +194 -0
- data/lib/temporalio/error/workflow_failure.rb +19 -0
- data/lib/temporalio/errors.rb +40 -0
- data/lib/temporalio/failure_converter/base.rb +26 -0
- data/lib/temporalio/failure_converter/basic.rb +319 -0
- data/lib/temporalio/failure_converter.rb +7 -0
- data/lib/temporalio/interceptor/chain.rb +28 -0
- data/lib/temporalio/interceptor/client.rb +123 -0
- data/lib/temporalio/payload_codec/base.rb +32 -0
- data/lib/temporalio/payload_converter/base.rb +24 -0
- data/lib/temporalio/payload_converter/bytes.rb +27 -0
- data/lib/temporalio/payload_converter/composite.rb +49 -0
- data/lib/temporalio/payload_converter/encoding_base.rb +35 -0
- data/lib/temporalio/payload_converter/json.rb +26 -0
- data/lib/temporalio/payload_converter/nil.rb +26 -0
- data/lib/temporalio/payload_converter.rb +14 -0
- data/lib/temporalio/retry_policy.rb +82 -0
- data/lib/temporalio/retry_state.rb +35 -0
- data/lib/temporalio/runtime.rb +25 -0
- data/lib/temporalio/timeout_type.rb +29 -0
- data/lib/temporalio/version.rb +3 -0
- data/lib/temporalio/worker/activity_runner.rb +92 -0
- data/lib/temporalio/worker/activity_worker.rb +138 -0
- data/lib/temporalio/worker/reactor.rb +46 -0
- data/lib/temporalio/worker/runner.rb +63 -0
- data/lib/temporalio/worker/sync_worker.rb +88 -0
- data/lib/temporalio/worker/thread_pool_executor.rb +51 -0
- data/lib/temporalio/worker.rb +198 -0
- data/lib/temporalio/workflow/execution_info.rb +54 -0
- data/lib/temporalio/workflow/execution_status.rb +36 -0
- data/lib/temporalio/workflow/id_reuse_policy.rb +36 -0
- data/lib/temporalio/workflow/query_reject_condition.rb +33 -0
- data/lib/temporalio.rb +12 -1
- data/lib/thermite_patch.rb +23 -0
- data/temporalio.gemspec +45 -0
- metadata +566 -9
- data/lib/temporal/version.rb +0 -3
- data/lib/temporal.rb +0 -4
- data/temporal.gemspec +0 -20
|
@@ -0,0 +1,319 @@
|
|
|
1
|
+
require 'temporal/api/common/v1/message_pb'
|
|
2
|
+
require 'temporal/api/failure/v1/message_pb'
|
|
3
|
+
require 'temporalio/error/failure'
|
|
4
|
+
require 'temporalio/failure_converter/base'
|
|
5
|
+
require 'temporalio/retry_state'
|
|
6
|
+
require 'temporalio/timeout_type'
|
|
7
|
+
|
|
8
|
+
module Temporalio
|
|
9
|
+
module FailureConverter
|
|
10
|
+
# A default implementation of a FailureConverter.
|
|
11
|
+
#
|
|
12
|
+
# Use {Temporalio::DataConverter} for the set of helper method for interaction with converters.
|
|
13
|
+
#
|
|
14
|
+
# @api private
|
|
15
|
+
class Basic < Base
|
|
16
|
+
def initialize(encode_common_attributes: false)
|
|
17
|
+
super()
|
|
18
|
+
|
|
19
|
+
@encode_common_attributes = encode_common_attributes
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def to_failure(error, payload_converter)
|
|
23
|
+
return error.raw if error.is_a?(Temporalio::Error::Failure) && error.raw
|
|
24
|
+
|
|
25
|
+
failure =
|
|
26
|
+
case error
|
|
27
|
+
when Temporalio::Error::ApplicationError
|
|
28
|
+
to_application_failure(error, payload_converter)
|
|
29
|
+
when Temporalio::Error::TimeoutError
|
|
30
|
+
to_timeout_failure(error, payload_converter)
|
|
31
|
+
when Temporalio::Error::CancelledError
|
|
32
|
+
to_cancelled_failure(error, payload_converter)
|
|
33
|
+
when Temporalio::Error::TerminatedError
|
|
34
|
+
to_terminated_failure(error, payload_converter)
|
|
35
|
+
when Temporalio::Error::ServerError
|
|
36
|
+
to_server_failure(error, payload_converter)
|
|
37
|
+
when Temporalio::Error::ResetWorkflowError
|
|
38
|
+
to_reset_workflow_failure(error, payload_converter)
|
|
39
|
+
when Temporalio::Error::ActivityError
|
|
40
|
+
to_activity_failure(error, payload_converter)
|
|
41
|
+
when Temporalio::Error::ChildWorkflowError
|
|
42
|
+
to_child_workflow_execution_failure(error, payload_converter)
|
|
43
|
+
else
|
|
44
|
+
to_generic_failure(error, payload_converter)
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
failure.message = error.message
|
|
48
|
+
failure.stack_trace = error.backtrace&.join("\n") || ''
|
|
49
|
+
# RBS: StandardError fallback is only needed to satisfy steep - https://github.com/soutaro/steep/issues/477
|
|
50
|
+
failure.cause = to_failure(error.cause || StandardError.new, payload_converter) if error.cause
|
|
51
|
+
|
|
52
|
+
if encode_common_attributes?
|
|
53
|
+
failure.encoded_attributes = payload_converter.to_payload(
|
|
54
|
+
'message' => failure.message,
|
|
55
|
+
'stack_trace' => failure.stack_trace,
|
|
56
|
+
)
|
|
57
|
+
failure.message = 'Encoded failure'
|
|
58
|
+
failure.stack_trace = ''
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
failure
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
def from_failure(failure, payload_converter)
|
|
65
|
+
failure = apply_from_encoded_attributes(failure, payload_converter)
|
|
66
|
+
cause = failure.cause ? from_failure(failure.cause, payload_converter) : nil
|
|
67
|
+
|
|
68
|
+
error =
|
|
69
|
+
if failure.application_failure_info
|
|
70
|
+
from_application_failure(failure, failure.application_failure_info, cause, payload_converter)
|
|
71
|
+
elsif failure.timeout_failure_info
|
|
72
|
+
from_timeout_failure(failure, failure.timeout_failure_info, cause, payload_converter)
|
|
73
|
+
elsif failure.canceled_failure_info
|
|
74
|
+
from_cancelled_failure(failure, failure.canceled_failure_info, cause, payload_converter)
|
|
75
|
+
elsif failure.terminated_failure_info
|
|
76
|
+
from_terminated_failure(failure, failure.terminated_failure_info, cause, payload_converter)
|
|
77
|
+
elsif failure.server_failure_info
|
|
78
|
+
from_server_failure(failure, failure.server_failure_info, cause, payload_converter)
|
|
79
|
+
elsif failure.reset_workflow_failure_info
|
|
80
|
+
from_reset_workflow_failure(failure, failure.reset_workflow_failure_info, cause, payload_converter)
|
|
81
|
+
elsif failure.activity_failure_info
|
|
82
|
+
from_activity_failure(failure, failure.activity_failure_info, cause, payload_converter)
|
|
83
|
+
elsif failure.child_workflow_execution_failure_info
|
|
84
|
+
from_child_workflow_execution_failure(
|
|
85
|
+
failure,
|
|
86
|
+
failure.child_workflow_execution_failure_info,
|
|
87
|
+
cause,
|
|
88
|
+
payload_converter,
|
|
89
|
+
)
|
|
90
|
+
else
|
|
91
|
+
from_generic_failure(failure, cause, payload_converter)
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
unless failure.stack_trace.empty?
|
|
95
|
+
error.set_backtrace(failure.stack_trace.split("\n"))
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
error
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
private
|
|
102
|
+
|
|
103
|
+
def encode_common_attributes?
|
|
104
|
+
@encode_common_attributes
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
def to_payloads(data, payload_converter)
|
|
108
|
+
return if data.nil? || Array(data).empty?
|
|
109
|
+
|
|
110
|
+
payloads = Array(data).map { |value| payload_converter.to_payload(value) }
|
|
111
|
+
Temporalio::Api::Common::V1::Payloads.new(payloads: payloads)
|
|
112
|
+
end
|
|
113
|
+
|
|
114
|
+
def from_payloads(payloads, payload_converter)
|
|
115
|
+
return [] unless payloads
|
|
116
|
+
|
|
117
|
+
payloads.payloads.map { |payload| payload_converter.from_payload(payload) }
|
|
118
|
+
end
|
|
119
|
+
|
|
120
|
+
def apply_from_encoded_attributes(failure, payload_converter)
|
|
121
|
+
return failure unless failure.encoded_attributes
|
|
122
|
+
|
|
123
|
+
attributes = payload_converter.from_payload(failure.encoded_attributes)
|
|
124
|
+
return failure unless attributes.is_a?(Hash)
|
|
125
|
+
|
|
126
|
+
failure = failure.dup
|
|
127
|
+
if attributes['message'].is_a?(String)
|
|
128
|
+
failure.message = attributes['message']
|
|
129
|
+
end
|
|
130
|
+
|
|
131
|
+
if attributes['stack_trace'].is_a?(String)
|
|
132
|
+
failure.stack_trace = attributes['stack_trace']
|
|
133
|
+
end
|
|
134
|
+
|
|
135
|
+
failure
|
|
136
|
+
end
|
|
137
|
+
|
|
138
|
+
def to_application_failure(error, payload_converter)
|
|
139
|
+
Temporalio::Api::Failure::V1::Failure.new(
|
|
140
|
+
application_failure_info: Temporalio::Api::Failure::V1::ApplicationFailureInfo.new(
|
|
141
|
+
type: error.type,
|
|
142
|
+
non_retryable: error.non_retryable,
|
|
143
|
+
details: to_payloads(error.details, payload_converter),
|
|
144
|
+
),
|
|
145
|
+
)
|
|
146
|
+
end
|
|
147
|
+
|
|
148
|
+
def to_timeout_failure(error, payload_converter)
|
|
149
|
+
Temporalio::Api::Failure::V1::Failure.new(
|
|
150
|
+
timeout_failure_info: Temporalio::Api::Failure::V1::TimeoutFailureInfo.new(
|
|
151
|
+
timeout_type: Temporalio::TimeoutType.to_raw(error.type),
|
|
152
|
+
last_heartbeat_details: to_payloads(error.last_heartbeat_details, payload_converter),
|
|
153
|
+
),
|
|
154
|
+
)
|
|
155
|
+
end
|
|
156
|
+
|
|
157
|
+
def to_cancelled_failure(error, payload_converter)
|
|
158
|
+
Temporalio::Api::Failure::V1::Failure.new(
|
|
159
|
+
canceled_failure_info: Temporalio::Api::Failure::V1::CanceledFailureInfo.new(
|
|
160
|
+
details: to_payloads(error.details, payload_converter),
|
|
161
|
+
),
|
|
162
|
+
)
|
|
163
|
+
end
|
|
164
|
+
|
|
165
|
+
def to_terminated_failure(_error, _payload_converter)
|
|
166
|
+
Temporalio::Api::Failure::V1::Failure.new(
|
|
167
|
+
terminated_failure_info: Temporalio::Api::Failure::V1::TerminatedFailureInfo.new,
|
|
168
|
+
)
|
|
169
|
+
end
|
|
170
|
+
|
|
171
|
+
def to_server_failure(error, _payload_converter)
|
|
172
|
+
Temporalio::Api::Failure::V1::Failure.new(
|
|
173
|
+
server_failure_info: Temporalio::Api::Failure::V1::ServerFailureInfo.new(
|
|
174
|
+
non_retryable: error.non_retryable,
|
|
175
|
+
),
|
|
176
|
+
)
|
|
177
|
+
end
|
|
178
|
+
|
|
179
|
+
def to_reset_workflow_failure(error, payload_converter)
|
|
180
|
+
Temporalio::Api::Failure::V1::Failure.new(
|
|
181
|
+
reset_workflow_failure_info: Temporalio::Api::Failure::V1::ResetWorkflowFailureInfo.new(
|
|
182
|
+
last_heartbeat_details: to_payloads(error.last_heartbeat_details, payload_converter),
|
|
183
|
+
),
|
|
184
|
+
)
|
|
185
|
+
end
|
|
186
|
+
|
|
187
|
+
def to_activity_failure(error, _payload_converter)
|
|
188
|
+
Temporalio::Api::Failure::V1::Failure.new(
|
|
189
|
+
activity_failure_info: Temporalio::Api::Failure::V1::ActivityFailureInfo.new(
|
|
190
|
+
scheduled_event_id: error.scheduled_event_id,
|
|
191
|
+
started_event_id: error.started_event_id,
|
|
192
|
+
identity: error.identity,
|
|
193
|
+
activity_type: Temporalio::Api::Common::V1::ActivityType.new(name: error.activity_name || ''),
|
|
194
|
+
activity_id: error.activity_id,
|
|
195
|
+
retry_state: Temporalio::RetryState.to_raw(error.retry_state),
|
|
196
|
+
),
|
|
197
|
+
)
|
|
198
|
+
end
|
|
199
|
+
|
|
200
|
+
def to_child_workflow_execution_failure(error, _payload_converter)
|
|
201
|
+
Temporalio::Api::Failure::V1::Failure.new(
|
|
202
|
+
child_workflow_execution_failure_info:
|
|
203
|
+
Temporalio::Api::Failure::V1::ChildWorkflowExecutionFailureInfo.new(
|
|
204
|
+
namespace: error.namespace,
|
|
205
|
+
workflow_execution: Temporalio::Api::Common::V1::WorkflowExecution.new(
|
|
206
|
+
workflow_id: error.workflow_id || '',
|
|
207
|
+
run_id: error.run_id || '',
|
|
208
|
+
),
|
|
209
|
+
workflow_type: Temporalio::Api::Common::V1::WorkflowType.new(name: error.workflow_name || ''),
|
|
210
|
+
initiated_event_id: error.initiated_event_id,
|
|
211
|
+
started_event_id: error.started_event_id,
|
|
212
|
+
retry_state: Temporalio::RetryState.to_raw(error.retry_state),
|
|
213
|
+
),
|
|
214
|
+
)
|
|
215
|
+
end
|
|
216
|
+
|
|
217
|
+
def to_generic_failure(error, _payload_converter)
|
|
218
|
+
Temporalio::Api::Failure::V1::Failure.new(
|
|
219
|
+
application_failure_info: Temporalio::Api::Failure::V1::ApplicationFailureInfo.new(
|
|
220
|
+
type: error.class.name,
|
|
221
|
+
),
|
|
222
|
+
)
|
|
223
|
+
end
|
|
224
|
+
|
|
225
|
+
def from_application_failure(failure, failure_info, cause, payload_converter)
|
|
226
|
+
Temporalio::Error::ApplicationError.new(
|
|
227
|
+
failure.message || 'Application error',
|
|
228
|
+
type: failure_info.type,
|
|
229
|
+
details: from_payloads(failure_info.details, payload_converter),
|
|
230
|
+
non_retryable: failure_info.non_retryable,
|
|
231
|
+
raw: failure,
|
|
232
|
+
cause: cause,
|
|
233
|
+
)
|
|
234
|
+
end
|
|
235
|
+
|
|
236
|
+
def from_timeout_failure(failure, failure_info, cause, payload_converter)
|
|
237
|
+
Temporalio::Error::TimeoutError.new(
|
|
238
|
+
failure.message || 'Timeout',
|
|
239
|
+
type: Temporalio::TimeoutType.from_raw(failure_info.timeout_type),
|
|
240
|
+
last_heartbeat_details: from_payloads(failure_info.last_heartbeat_details, payload_converter),
|
|
241
|
+
raw: failure,
|
|
242
|
+
cause: cause,
|
|
243
|
+
)
|
|
244
|
+
end
|
|
245
|
+
|
|
246
|
+
def from_cancelled_failure(failure, failure_info, cause, payload_converter)
|
|
247
|
+
Temporalio::Error::CancelledError.new(
|
|
248
|
+
failure.message || 'Cancelled',
|
|
249
|
+
details: from_payloads(failure_info.details, payload_converter),
|
|
250
|
+
raw: failure,
|
|
251
|
+
cause: cause,
|
|
252
|
+
)
|
|
253
|
+
end
|
|
254
|
+
|
|
255
|
+
def from_terminated_failure(failure, _failure_info, cause, _payload_converter)
|
|
256
|
+
Temporalio::Error::TerminatedError.new(
|
|
257
|
+
failure.message || 'Terminated',
|
|
258
|
+
raw: failure,
|
|
259
|
+
cause: cause,
|
|
260
|
+
)
|
|
261
|
+
end
|
|
262
|
+
|
|
263
|
+
def from_server_failure(failure, failure_info, cause, _payload_converter)
|
|
264
|
+
Temporalio::Error::ServerError.new(
|
|
265
|
+
failure.message || 'Server error',
|
|
266
|
+
non_retryable: failure_info.non_retryable,
|
|
267
|
+
raw: failure,
|
|
268
|
+
cause: cause,
|
|
269
|
+
)
|
|
270
|
+
end
|
|
271
|
+
|
|
272
|
+
def from_reset_workflow_failure(failure, failure_info, cause, payload_converter)
|
|
273
|
+
Temporalio::Error::ResetWorkflowError.new(
|
|
274
|
+
failure.message || 'Reset workflow error',
|
|
275
|
+
last_heartbeat_details: from_payloads(failure_info.last_heartbeat_details, payload_converter),
|
|
276
|
+
raw: failure,
|
|
277
|
+
cause: cause,
|
|
278
|
+
)
|
|
279
|
+
end
|
|
280
|
+
|
|
281
|
+
def from_activity_failure(failure, failure_info, cause, _payload_converter)
|
|
282
|
+
Temporalio::Error::ActivityError.new(
|
|
283
|
+
failure.message || 'Activity error',
|
|
284
|
+
scheduled_event_id: failure_info.scheduled_event_id,
|
|
285
|
+
started_event_id: failure_info.started_event_id,
|
|
286
|
+
identity: failure_info.identity,
|
|
287
|
+
activity_name: failure_info.activity_type&.name,
|
|
288
|
+
activity_id: failure_info.activity_id,
|
|
289
|
+
retry_state: Temporalio::RetryState.from_raw(failure_info.retry_state),
|
|
290
|
+
raw: failure,
|
|
291
|
+
cause: cause,
|
|
292
|
+
)
|
|
293
|
+
end
|
|
294
|
+
|
|
295
|
+
def from_child_workflow_execution_failure(failure, failure_info, cause, _payload_converter)
|
|
296
|
+
Temporalio::Error::ChildWorkflowError.new(
|
|
297
|
+
failure.message || 'Child workflow error',
|
|
298
|
+
namespace: failure_info.namespace,
|
|
299
|
+
workflow_id: failure_info.workflow_execution&.workflow_id,
|
|
300
|
+
run_id: failure_info.workflow_execution&.run_id,
|
|
301
|
+
workflow_name: failure_info.workflow_type&.name,
|
|
302
|
+
initiated_event_id: failure_info.initiated_event_id,
|
|
303
|
+
started_event_id: failure_info.started_event_id,
|
|
304
|
+
retry_state: Temporalio::RetryState.from_raw(failure_info.retry_state),
|
|
305
|
+
raw: failure,
|
|
306
|
+
cause: cause,
|
|
307
|
+
)
|
|
308
|
+
end
|
|
309
|
+
|
|
310
|
+
def from_generic_failure(failure, cause, _payload_converter)
|
|
311
|
+
Temporalio::Error::Failure.new(
|
|
312
|
+
failure.message || 'Failure error',
|
|
313
|
+
raw: failure,
|
|
314
|
+
cause: cause,
|
|
315
|
+
)
|
|
316
|
+
end
|
|
317
|
+
end
|
|
318
|
+
end
|
|
319
|
+
end
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
module Temporalio
|
|
2
|
+
module Interceptor
|
|
3
|
+
# @api private
|
|
4
|
+
class Chain
|
|
5
|
+
def initialize(interceptors = [])
|
|
6
|
+
@interceptors = interceptors
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
def invoke(method, input)
|
|
10
|
+
chain = interceptors.dup
|
|
11
|
+
|
|
12
|
+
traverse_chain = lambda do |i|
|
|
13
|
+
if chain.empty?
|
|
14
|
+
yield(i)
|
|
15
|
+
else
|
|
16
|
+
chain.shift.public_send(method, i, &traverse_chain)
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
traverse_chain.call(input)
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
private
|
|
24
|
+
|
|
25
|
+
attr_reader :interceptors
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
module Temporalio
|
|
2
|
+
module Interceptor
|
|
3
|
+
# Base class for implementing Client side interceptors.
|
|
4
|
+
#
|
|
5
|
+
# @abstract
|
|
6
|
+
class Client
|
|
7
|
+
class StartWorkflowInput < Struct.new(
|
|
8
|
+
:workflow,
|
|
9
|
+
:args,
|
|
10
|
+
:id,
|
|
11
|
+
:task_queue,
|
|
12
|
+
:execution_timeout,
|
|
13
|
+
:run_timeout,
|
|
14
|
+
:task_timeout,
|
|
15
|
+
:id_reuse_policy,
|
|
16
|
+
:retry_policy,
|
|
17
|
+
:cron_schedule,
|
|
18
|
+
:memo,
|
|
19
|
+
:search_attributes,
|
|
20
|
+
:headers,
|
|
21
|
+
:start_signal,
|
|
22
|
+
:start_signal_args,
|
|
23
|
+
:rpc_metadata,
|
|
24
|
+
:rpc_timeout,
|
|
25
|
+
keyword_init: true,
|
|
26
|
+
); end
|
|
27
|
+
|
|
28
|
+
class DescribeWorkflowInput < Struct.new(
|
|
29
|
+
:id,
|
|
30
|
+
:run_id,
|
|
31
|
+
:rpc_metadata,
|
|
32
|
+
:rpc_timeout,
|
|
33
|
+
keyword_init: true,
|
|
34
|
+
); end
|
|
35
|
+
|
|
36
|
+
class QueryWorkflowInput < Struct.new(
|
|
37
|
+
:id,
|
|
38
|
+
:run_id,
|
|
39
|
+
:query,
|
|
40
|
+
:args,
|
|
41
|
+
:reject_condition,
|
|
42
|
+
:headers,
|
|
43
|
+
:rpc_metadata,
|
|
44
|
+
:rpc_timeout,
|
|
45
|
+
keyword_init: true,
|
|
46
|
+
); end
|
|
47
|
+
|
|
48
|
+
class SignalWorkflowInput < Struct.new(
|
|
49
|
+
:id,
|
|
50
|
+
:run_id,
|
|
51
|
+
:signal,
|
|
52
|
+
:args,
|
|
53
|
+
:headers,
|
|
54
|
+
:rpc_metadata,
|
|
55
|
+
:rpc_timeout,
|
|
56
|
+
keyword_init: true,
|
|
57
|
+
); end
|
|
58
|
+
|
|
59
|
+
class CancelWorkflowInput < Struct.new(
|
|
60
|
+
:id,
|
|
61
|
+
:run_id,
|
|
62
|
+
:first_execution_run_id,
|
|
63
|
+
:reason,
|
|
64
|
+
:rpc_metadata,
|
|
65
|
+
:rpc_timeout,
|
|
66
|
+
keyword_init: true,
|
|
67
|
+
); end
|
|
68
|
+
|
|
69
|
+
class TerminateWorkflowInput < Struct.new(
|
|
70
|
+
:id,
|
|
71
|
+
:run_id,
|
|
72
|
+
:first_execution_run_id,
|
|
73
|
+
:reason,
|
|
74
|
+
:args,
|
|
75
|
+
:rpc_metadata,
|
|
76
|
+
:rpc_timeout,
|
|
77
|
+
keyword_init: true,
|
|
78
|
+
); end
|
|
79
|
+
|
|
80
|
+
# Interceptor for {Temporalio::Client#start_workflow}.
|
|
81
|
+
#
|
|
82
|
+
# @param input [StartWorkflowInput]
|
|
83
|
+
def start_workflow(input)
|
|
84
|
+
yield(input)
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
# Interceptor for {Temporalio::Client::WorkflowHandle#describe}.
|
|
88
|
+
#
|
|
89
|
+
# @param input [DescribeWorkflowInput]
|
|
90
|
+
def describe_workflow(input)
|
|
91
|
+
yield(input)
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
# Interceptor for {Temporalio::Client::WorkflowHandle#query}.
|
|
95
|
+
#
|
|
96
|
+
# @param input [QueryWorkflowInput]
|
|
97
|
+
def query_workflow(input)
|
|
98
|
+
yield(input)
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
# Interceptor for {Temporalio::Client::WorkflowHandle#signal}.
|
|
102
|
+
#
|
|
103
|
+
# @param input [SignalWorkflowInput]
|
|
104
|
+
def signal_workflow(input)
|
|
105
|
+
yield(input)
|
|
106
|
+
end
|
|
107
|
+
|
|
108
|
+
# Interceptor for {Temporalio::Client::WorkflowHandle#cancel}.
|
|
109
|
+
#
|
|
110
|
+
# @param input [CancelWorkflowInput]
|
|
111
|
+
def cancel_workflow(input)
|
|
112
|
+
yield(input)
|
|
113
|
+
end
|
|
114
|
+
|
|
115
|
+
# Interceptor for {Temporalio::Client::WorkflowHandle#terminate}.
|
|
116
|
+
#
|
|
117
|
+
# @param input [TerminateWorkflowInput]
|
|
118
|
+
def terminate_workflow(input)
|
|
119
|
+
yield(input)
|
|
120
|
+
end
|
|
121
|
+
end
|
|
122
|
+
end
|
|
123
|
+
end
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
module Temporalio
|
|
2
|
+
module PayloadCodec
|
|
3
|
+
# @abstract Use this Interface for implementing your payload codecs.
|
|
4
|
+
#
|
|
5
|
+
# Codec for encoding/decoding to/from bytes. Commonly used for compression or encryption.
|
|
6
|
+
class Base
|
|
7
|
+
# Encode the given payloads.
|
|
8
|
+
#
|
|
9
|
+
# @param _payloads [Array<Temporalio::Api::Common::V1::Payload>] Payloads to encode.
|
|
10
|
+
# This value should not be mutated.
|
|
11
|
+
#
|
|
12
|
+
# @return [Array<Temporalio::Api::Common::V1::Payload>] Encoded payloads. Note, this does not
|
|
13
|
+
# have to be the same number as payloads given, but must be at least one and cannot be more
|
|
14
|
+
# than was given.
|
|
15
|
+
def encode(_payloads)
|
|
16
|
+
raise NoMethodError, 'must implement #encode'
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
# Decode the given payloads.
|
|
20
|
+
#
|
|
21
|
+
# @param _payloads [Array<Temporalio::Api::Common::V1::Payload>] Payloads to decode. This value
|
|
22
|
+
# should not be mutated.
|
|
23
|
+
#
|
|
24
|
+
# @return [Array<Temporalio::Api::Common::V1::Payload>] Decoded payloads. Note, this does not
|
|
25
|
+
# have to be the same number as payloads given, but must be at least one and cannot be more
|
|
26
|
+
# than was given.
|
|
27
|
+
def decode(_payloads)
|
|
28
|
+
raise NoMethodError, 'must implement #decode'
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
module Temporalio
|
|
2
|
+
module PayloadConverter
|
|
3
|
+
# @abstract Use this Interface for implementing your payload converter.
|
|
4
|
+
class Base
|
|
5
|
+
# Convert a Ruby value to a proto Payload.
|
|
6
|
+
#
|
|
7
|
+
# @param _data [any] Ruby value to be converted.
|
|
8
|
+
#
|
|
9
|
+
# @return [Temporalio::Api::Common::V1::Payload]
|
|
10
|
+
def to_payload(_data)
|
|
11
|
+
raise NoMethodError, 'must implement #to_payload'
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
# Convert a proto Payload to a Ruby value.
|
|
15
|
+
#
|
|
16
|
+
# @param _payload [Temporalio::Api::Common::V1::Payload] Proto Payload to be converted.
|
|
17
|
+
#
|
|
18
|
+
# @return [any]
|
|
19
|
+
def from_payload(_payload)
|
|
20
|
+
raise NoMethodError, 'must implement #from_payload'
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
require 'temporalio/payload_converter/encoding_base'
|
|
2
|
+
|
|
3
|
+
module Temporalio
|
|
4
|
+
module PayloadConverter
|
|
5
|
+
# A payload converter for encoding/decoding byte strings.
|
|
6
|
+
class Bytes < EncodingBase
|
|
7
|
+
ENCODING = 'binary/plain'.freeze
|
|
8
|
+
|
|
9
|
+
def encoding
|
|
10
|
+
ENCODING
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def from_payload(payload)
|
|
14
|
+
payload.data
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def to_payload(data)
|
|
18
|
+
return nil unless data.is_a?(String) && data.encoding == Encoding::ASCII_8BIT
|
|
19
|
+
|
|
20
|
+
Temporalio::Api::Common::V1::Payload.new(
|
|
21
|
+
metadata: { 'encoding' => ENCODING },
|
|
22
|
+
data: data,
|
|
23
|
+
)
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
require 'temporalio/payload_converter/base'
|
|
2
|
+
require 'temporalio/errors'
|
|
3
|
+
|
|
4
|
+
module Temporalio
|
|
5
|
+
module PayloadConverter
|
|
6
|
+
# A payload converter for combining multiple payload converters together.
|
|
7
|
+
class Composite < Base
|
|
8
|
+
class ConverterNotFound < Temporalio::Error; end
|
|
9
|
+
class EncodingNotSet < Temporalio::Error; end
|
|
10
|
+
|
|
11
|
+
# @param converters [Array<Temporalio::PayloadConverter::Base>] List of converters
|
|
12
|
+
def initialize(*converters)
|
|
13
|
+
super()
|
|
14
|
+
|
|
15
|
+
@converters = converters.each_with_object({}) do |converter, result|
|
|
16
|
+
result[converter.encoding] = converter
|
|
17
|
+
result
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def to_payload(data)
|
|
22
|
+
converters.each_value do |converter|
|
|
23
|
+
payload = converter.to_payload(data)
|
|
24
|
+
return payload unless payload.nil?
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
available = converters.values.map(&:class).join(', ')
|
|
28
|
+
raise ConverterNotFound, "Available converters (#{available}) could not convert data"
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def from_payload(payload)
|
|
32
|
+
encoding = payload.metadata['encoding']
|
|
33
|
+
raise EncodingNotSet, 'Missing payload encoding' unless encoding
|
|
34
|
+
|
|
35
|
+
converter = converters[encoding]
|
|
36
|
+
unless converter
|
|
37
|
+
available = converters.keys.join(', ')
|
|
38
|
+
raise ConverterNotFound, "Missing converter for encoding '#{encoding}' (available: #{available})"
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
converter.from_payload(payload)
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
private
|
|
45
|
+
|
|
46
|
+
attr_reader :converters
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
end
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
require 'temporal/api/common/v1/message_pb'
|
|
2
|
+
|
|
3
|
+
module Temporalio
|
|
4
|
+
module PayloadConverter
|
|
5
|
+
# @abstract Use this Interface for implementing an encoding payload converter.
|
|
6
|
+
# This is used as a converter for the {Temporalio::PayloadConverter::Composite}.
|
|
7
|
+
class EncodingBase
|
|
8
|
+
# A mime-type for the converter's encoding.
|
|
9
|
+
#
|
|
10
|
+
# @return [String]
|
|
11
|
+
def encoding
|
|
12
|
+
raise NoMethodError, 'must implement #encoding'
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
# Convert a Ruby value to a proto Payload.
|
|
16
|
+
#
|
|
17
|
+
# @param _data [any] Ruby value to be converted.
|
|
18
|
+
#
|
|
19
|
+
# @return [Temporalio::Api::Common::V1::Payload, nil] Return `nil` if the received value is not
|
|
20
|
+
# supported by this converter.
|
|
21
|
+
def to_payload(_data)
|
|
22
|
+
raise NoMethodError, 'must implement #to_payload'
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
# Convert a proto Payload to a Ruby value.
|
|
26
|
+
#
|
|
27
|
+
# @param _payload [Temporalio::Api::Common::V1::Payload] Proto Payload to be converted.
|
|
28
|
+
#
|
|
29
|
+
# @return [any]
|
|
30
|
+
def from_payload(_payload)
|
|
31
|
+
raise NoMethodError, 'must implement #from_payload'
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
end
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
require 'json/ext'
|
|
2
|
+
require 'temporalio/payload_converter/encoding_base'
|
|
3
|
+
|
|
4
|
+
module Temporalio
|
|
5
|
+
module PayloadConverter
|
|
6
|
+
# A payload converter for encoding/decoding JSON data.
|
|
7
|
+
class JSON < EncodingBase
|
|
8
|
+
ENCODING = 'json/plain'.freeze
|
|
9
|
+
|
|
10
|
+
def encoding
|
|
11
|
+
ENCODING
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def from_payload(payload)
|
|
15
|
+
::JSON.parse(payload.data, create_additions: true)
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def to_payload(data)
|
|
19
|
+
Temporalio::Api::Common::V1::Payload.new(
|
|
20
|
+
metadata: { 'encoding' => ENCODING },
|
|
21
|
+
data: ::JSON.generate(data).b,
|
|
22
|
+
)
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|