temporalio 0.0.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.
- checksums.yaml +7 -0
- data/Gemfile +3 -0
- data/LICENSE +20 -0
- data/README.md +130 -0
- data/bridge/Cargo.lock +2865 -0
- data/bridge/Cargo.toml +26 -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 +107 -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/bridge-ffi/Cargo.toml +24 -0
- data/bridge/sdk-core/bridge-ffi/LICENSE.txt +23 -0
- data/bridge/sdk-core/bridge-ffi/build.rs +25 -0
- data/bridge/sdk-core/bridge-ffi/include/sdk-core-bridge.h +249 -0
- data/bridge/sdk-core/bridge-ffi/src/lib.rs +825 -0
- data/bridge/sdk-core/bridge-ffi/src/wrappers.rs +211 -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 +1294 -0
- data/bridge/sdk-core/client/src/metrics.rs +165 -0
- data/bridge/sdk-core/client/src/raw.rs +931 -0
- data/bridge/sdk-core/client/src/retry.rs +674 -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 +73 -0
- data/bridge/sdk-core/core/src/abstractions.rs +166 -0
- data/bridge/sdk-core/core/src/core_tests/activity_tasks.rs +911 -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 +515 -0
- data/bridge/sdk-core/core/src/core_tests/mod.rs +100 -0
- data/bridge/sdk-core/core/src/core_tests/queries.rs +736 -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 +2070 -0
- data/bridge/sdk-core/core/src/ephemeral_server/mod.rs +515 -0
- data/bridge/sdk-core/core/src/lib.rs +175 -0
- data/bridge/sdk-core/core/src/log_export.rs +62 -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 +71 -0
- data/bridge/sdk-core/core/src/retry_logic.rs +202 -0
- data/bridge/sdk-core/core/src/telemetry/metrics.rs +383 -0
- data/bridge/sdk-core/core/src/telemetry/mod.rs +412 -0
- data/bridge/sdk-core/core/src/telemetry/prometheus_server.rs +77 -0
- data/bridge/sdk-core/core/src/test_help/mod.rs +875 -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 +1042 -0
- data/bridge/sdk-core/core/src/worker/activities.rs +464 -0
- data/bridge/sdk-core/core/src/worker/client/mocks.rs +87 -0
- data/bridge/sdk-core/core/src/worker/client.rs +347 -0
- data/bridge/sdk-core/core/src/worker/mod.rs +566 -0
- data/bridge/sdk-core/core/src/worker/workflow/bridge.rs +37 -0
- data/bridge/sdk-core/core/src/worker/workflow/driven_workflow.rs +110 -0
- data/bridge/sdk-core/core/src/worker/workflow/history_update.rs +458 -0
- data/bridge/sdk-core/core/src/worker/workflow/machines/activity_state_machine.rs +911 -0
- data/bridge/sdk-core/core/src/worker/workflow/machines/cancel_external_state_machine.rs +298 -0
- data/bridge/sdk-core/core/src/worker/workflow/machines/cancel_workflow_state_machine.rs +171 -0
- data/bridge/sdk-core/core/src/worker/workflow/machines/child_workflow_state_machine.rs +860 -0
- data/bridge/sdk-core/core/src/worker/workflow/machines/complete_workflow_state_machine.rs +140 -0
- data/bridge/sdk-core/core/src/worker/workflow/machines/continue_as_new_workflow_state_machine.rs +161 -0
- data/bridge/sdk-core/core/src/worker/workflow/machines/fail_workflow_state_machine.rs +133 -0
- data/bridge/sdk-core/core/src/worker/workflow/machines/local_activity_state_machine.rs +1448 -0
- data/bridge/sdk-core/core/src/worker/workflow/machines/mod.rs +342 -0
- data/bridge/sdk-core/core/src/worker/workflow/machines/mutable_side_effect_state_machine.rs +127 -0
- data/bridge/sdk-core/core/src/worker/workflow/machines/patch_state_machine.rs +712 -0
- data/bridge/sdk-core/core/src/worker/workflow/machines/side_effect_state_machine.rs +71 -0
- data/bridge/sdk-core/core/src/worker/workflow/machines/signal_external_state_machine.rs +443 -0
- data/bridge/sdk-core/core/src/worker/workflow/machines/timer_state_machine.rs +439 -0
- data/bridge/sdk-core/core/src/worker/workflow/machines/transition_coverage.rs +169 -0
- data/bridge/sdk-core/core/src/worker/workflow/machines/upsert_search_attributes_state_machine.rs +246 -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 +1184 -0
- data/bridge/sdk-core/core/src/worker/workflow/machines/workflow_task_state_machine.rs +277 -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 +647 -0
- data/bridge/sdk-core/core/src/worker/workflow/mod.rs +1143 -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 +940 -0
- data/bridge/sdk-core/core-api/Cargo.toml +31 -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 +151 -0
- data/bridge/sdk-core/core-api/src/worker.rs +135 -0
- data/bridge/sdk-core/etc/deps.svg +187 -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/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/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 +12 -0
- data/bridge/sdk-core/protos/api_upstream/dependencies/gogoproto/gogo.proto +141 -0
- data/bridge/sdk-core/protos/api_upstream/temporal/api/batch/v1/message.proto +86 -0
- data/bridge/sdk-core/protos/api_upstream/temporal/api/cluster/v1/message.proto +83 -0
- data/bridge/sdk-core/protos/api_upstream/temporal/api/command/v1/message.proto +259 -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 +46 -0
- data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/cluster.proto +40 -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 +55 -0
- data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/event_type.proto +168 -0
- data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/failed_cause.proto +97 -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 +51 -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 +751 -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 +161 -0
- data/bridge/sdk-core/protos/api_upstream/temporal/api/operatorservice/v1/service.proto +99 -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 +300 -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/update/v1/message.proto +46 -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 +145 -0
- data/bridge/sdk-core/protos/api_upstream/temporal/api/workflowservice/v1/request_response.proto +1124 -0
- data/bridge/sdk-core/protos/api_upstream/temporal/api/workflowservice/v1/service.proto +401 -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/bridge/bridge.proto +210 -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 +261 -0
- data/bridge/sdk-core/protos/local/temporal/sdk/core/workflow_commands/workflow_commands.proto +297 -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/conversions.rs +8 -0
- data/bridge/sdk-core/sdk/src/interceptors.rs +17 -0
- data/bridge/sdk-core/sdk/src/lib.rs +792 -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 +683 -0
- data/bridge/sdk-core/sdk/src/workflow_future.rs +503 -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 +108 -0
- data/bridge/sdk-core/sdk-core-protos/src/constants.rs +7 -0
- data/bridge/sdk-core/sdk-core-protos/src/history_builder.rs +497 -0
- data/bridge/sdk-core/sdk-core-protos/src/history_info.rs +230 -0
- data/bridge/sdk-core/sdk-core-protos/src/lib.rs +1910 -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 +35 -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 +598 -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 +218 -0
- data/bridge/sdk-core/tests/integ_tests/polling_tests.rs +146 -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 +634 -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 +137 -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 +587 -0
- data/bridge/sdk-core/tests/load_tests.rs +191 -0
- data/bridge/sdk-core/tests/main.rs +111 -0
- data/bridge/sdk-core/tests/runner.rs +93 -0
- data/bridge/src/connection.rs +167 -0
- data/bridge/src/lib.rs +180 -0
- data/bridge/src/runtime.rs +47 -0
- data/bridge/src/worker.rs +73 -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 +48 -0
- data/lib/gen/temporal/api/cluster/v1/message_pb.rb +67 -0
- data/lib/gen/temporal/api/command/v1/message_pb.rb +166 -0
- data/lib/gen/temporal/api/common/v1/message_pb.rb +69 -0
- data/lib/gen/temporal/api/enums/v1/batch_operation_pb.rb +32 -0
- data/lib/gen/temporal/api/enums/v1/cluster_pb.rb +26 -0
- data/lib/gen/temporal/api/enums/v1/command_type_pb.rb +37 -0
- data/lib/gen/temporal/api/enums/v1/common_pb.rb +41 -0
- data/lib/gen/temporal/api/enums/v1/event_type_pb.rb +67 -0
- data/lib/gen/temporal/api/enums/v1/failed_cause_pb.rb +71 -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 +28 -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 +489 -0
- data/lib/gen/temporal/api/namespace/v1/message_pb.rb +63 -0
- data/lib/gen/temporal/api/operatorservice/v1/request_response_pb.rb +125 -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 +128 -0
- data/lib/gen/temporal/api/taskqueue/v1/message_pb.rb +73 -0
- data/lib/gen/temporal/api/update/v1/message_pb.rb +26 -0
- data/lib/gen/temporal/api/version/v1/message_pb.rb +41 -0
- data/lib/gen/temporal/api/workflow/v1/message_pb.rb +110 -0
- data/lib/gen/temporal/api/workflowservice/v1/request_response_pb.rb +771 -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 +164 -0
- data/lib/gen/temporal/sdk/core/workflow_commands/workflow_commands_pb.rb +192 -0
- data/lib/gen/temporal/sdk/core/workflow_completion/workflow_completion_pb.rb +34 -0
- data/lib/temporal/bridge.rb +14 -0
- data/lib/temporal/client/implementation.rb +339 -0
- data/lib/temporal/client/workflow_handle.rb +243 -0
- data/lib/temporal/client.rb +144 -0
- data/lib/temporal/connection.rb +736 -0
- data/lib/temporal/data_converter.rb +150 -0
- data/lib/temporal/error/failure.rb +194 -0
- data/lib/temporal/error/workflow_failure.rb +17 -0
- data/lib/temporal/errors.rb +22 -0
- data/lib/temporal/failure_converter/base.rb +26 -0
- data/lib/temporal/failure_converter/basic.rb +313 -0
- data/lib/temporal/failure_converter.rb +8 -0
- data/lib/temporal/interceptor/chain.rb +27 -0
- data/lib/temporal/interceptor/client.rb +102 -0
- data/lib/temporal/payload_codec/base.rb +32 -0
- data/lib/temporal/payload_converter/base.rb +24 -0
- data/lib/temporal/payload_converter/bytes.rb +26 -0
- data/lib/temporal/payload_converter/composite.rb +47 -0
- data/lib/temporal/payload_converter/encoding_base.rb +35 -0
- data/lib/temporal/payload_converter/json.rb +25 -0
- data/lib/temporal/payload_converter/nil.rb +25 -0
- data/lib/temporal/payload_converter.rb +14 -0
- data/lib/temporal/retry_policy.rb +82 -0
- data/lib/temporal/retry_state.rb +35 -0
- data/lib/temporal/runtime.rb +22 -0
- data/lib/temporal/timeout_type.rb +29 -0
- data/lib/temporal/version.rb +3 -0
- data/lib/temporal/workflow/execution_info.rb +54 -0
- data/lib/temporal/workflow/execution_status.rb +36 -0
- data/lib/temporal/workflow/id_reuse_policy.rb +36 -0
- data/lib/temporal/workflow/query_reject_condition.rb +33 -0
- data/lib/temporal.rb +8 -0
- data/lib/temporalio.rb +3 -0
- data/lib/thermite_patch.rb +23 -0
- data/temporalio.gemspec +41 -0
- metadata +583 -0
@@ -0,0 +1,342 @@
|
|
1
|
+
mod workflow_machines;
|
2
|
+
|
3
|
+
mod activity_state_machine;
|
4
|
+
mod cancel_external_state_machine;
|
5
|
+
mod cancel_workflow_state_machine;
|
6
|
+
mod child_workflow_state_machine;
|
7
|
+
mod complete_workflow_state_machine;
|
8
|
+
mod continue_as_new_workflow_state_machine;
|
9
|
+
mod fail_workflow_state_machine;
|
10
|
+
mod local_activity_state_machine;
|
11
|
+
#[allow(unused)]
|
12
|
+
mod mutable_side_effect_state_machine;
|
13
|
+
mod patch_state_machine;
|
14
|
+
#[allow(unused)]
|
15
|
+
mod side_effect_state_machine;
|
16
|
+
mod signal_external_state_machine;
|
17
|
+
mod timer_state_machine;
|
18
|
+
mod upsert_search_attributes_state_machine;
|
19
|
+
mod workflow_task_state_machine;
|
20
|
+
|
21
|
+
#[cfg(test)]
|
22
|
+
mod transition_coverage;
|
23
|
+
|
24
|
+
pub(crate) use workflow_machines::{WFMachinesError, WorkflowMachines};
|
25
|
+
|
26
|
+
use crate::telemetry::VecDisplayer;
|
27
|
+
use activity_state_machine::ActivityMachine;
|
28
|
+
use cancel_external_state_machine::CancelExternalMachine;
|
29
|
+
use cancel_workflow_state_machine::CancelWorkflowMachine;
|
30
|
+
use child_workflow_state_machine::ChildWorkflowMachine;
|
31
|
+
use complete_workflow_state_machine::CompleteWorkflowMachine;
|
32
|
+
use continue_as_new_workflow_state_machine::ContinueAsNewWorkflowMachine;
|
33
|
+
use fail_workflow_state_machine::FailWorkflowMachine;
|
34
|
+
use local_activity_state_machine::LocalActivityMachine;
|
35
|
+
use patch_state_machine::PatchMachine;
|
36
|
+
use prost::alloc::fmt::Formatter;
|
37
|
+
use rustfsm::{MachineError, StateMachine};
|
38
|
+
use signal_external_state_machine::SignalExternalMachine;
|
39
|
+
use std::{
|
40
|
+
convert::{TryFrom, TryInto},
|
41
|
+
fmt::{Debug, Display},
|
42
|
+
};
|
43
|
+
use temporal_sdk_core_protos::temporal::api::{
|
44
|
+
command::v1::Command as ProtoCommand,
|
45
|
+
enums::v1::{CommandType, EventType},
|
46
|
+
history::v1::HistoryEvent,
|
47
|
+
};
|
48
|
+
use timer_state_machine::TimerMachine;
|
49
|
+
use upsert_search_attributes_state_machine::UpsertSearchAttributesMachine;
|
50
|
+
use workflow_machines::MachineResponse;
|
51
|
+
use workflow_task_state_machine::WorkflowTaskMachine;
|
52
|
+
|
53
|
+
#[cfg(test)]
|
54
|
+
use transition_coverage::add_coverage;
|
55
|
+
|
56
|
+
#[derive(Copy, Clone, Debug, derive_more::Display, Eq, PartialEq)]
|
57
|
+
enum MachineKind {
|
58
|
+
Activity,
|
59
|
+
CancelWorkflow,
|
60
|
+
ChildWorkflow,
|
61
|
+
CompleteWorkflow,
|
62
|
+
ContinueAsNewWorkflow,
|
63
|
+
FailWorkflow,
|
64
|
+
Timer,
|
65
|
+
Patch,
|
66
|
+
WorkflowTask,
|
67
|
+
SignalExternalWorkflow,
|
68
|
+
CancelExternalWorkflow,
|
69
|
+
LocalActivity,
|
70
|
+
UpsertSearchAttributes,
|
71
|
+
}
|
72
|
+
|
73
|
+
#[enum_dispatch::enum_dispatch]
|
74
|
+
#[allow(clippy::enum_variant_names, clippy::large_enum_variant)]
|
75
|
+
enum Machines {
|
76
|
+
ActivityMachine,
|
77
|
+
CancelExternalMachine,
|
78
|
+
CancelWorkflowMachine,
|
79
|
+
ChildWorkflowMachine,
|
80
|
+
CompleteWorkflowMachine,
|
81
|
+
ContinueAsNewWorkflowMachine,
|
82
|
+
FailWorkflowMachine,
|
83
|
+
LocalActivityMachine,
|
84
|
+
PatchMachine,
|
85
|
+
SignalExternalMachine,
|
86
|
+
TimerMachine,
|
87
|
+
WorkflowTaskMachine,
|
88
|
+
UpsertSearchAttributesMachine,
|
89
|
+
}
|
90
|
+
|
91
|
+
/// Extends [rustfsm::StateMachine] with some functionality specific to the temporal SDK.
|
92
|
+
///
|
93
|
+
/// Formerly known as `EntityStateMachine` in Java.
|
94
|
+
#[enum_dispatch::enum_dispatch(Machines)]
|
95
|
+
trait TemporalStateMachine: Send {
|
96
|
+
fn kind(&self) -> MachineKind;
|
97
|
+
fn handle_command(
|
98
|
+
&mut self,
|
99
|
+
command_type: CommandType,
|
100
|
+
) -> Result<Vec<MachineResponse>, WFMachinesError>;
|
101
|
+
|
102
|
+
/// Returns true if this machine is compatible with the provided event. Provides a way to know
|
103
|
+
/// ahead of time if it's worth trying to call [TemporalStateMachine::handle_event] without
|
104
|
+
/// requiring mutable access.
|
105
|
+
fn matches_event(&self, event: &HistoryEvent) -> bool;
|
106
|
+
|
107
|
+
/// Tell the state machine to handle some event. Returns a list of responses that can be used
|
108
|
+
/// to update the overall state of the workflow. EX: To issue outgoing WF activations.
|
109
|
+
fn handle_event(
|
110
|
+
&mut self,
|
111
|
+
event: HistoryEvent,
|
112
|
+
has_next_event: bool,
|
113
|
+
) -> Result<Vec<MachineResponse>, WFMachinesError>;
|
114
|
+
|
115
|
+
/// Attempt to cancel the command associated with this state machine, if it is cancellable
|
116
|
+
fn cancel(&mut self) -> Result<Vec<MachineResponse>, WFMachinesError>;
|
117
|
+
|
118
|
+
/// Should return true if the command was cancelled before we sent it to the server. Always
|
119
|
+
/// returns false for non-cancellable machines
|
120
|
+
fn was_cancelled_before_sent_to_server(&self) -> bool;
|
121
|
+
|
122
|
+
/// Returns true if the state machine is in a final state
|
123
|
+
fn is_final_state(&self) -> bool;
|
124
|
+
}
|
125
|
+
|
126
|
+
impl<SM> TemporalStateMachine for SM
|
127
|
+
where
|
128
|
+
SM: StateMachine + WFMachinesAdapter + Cancellable + OnEventWrapper + Clone + Send + 'static,
|
129
|
+
<SM as StateMachine>::Event: TryFrom<HistoryEvent> + TryFrom<CommandType> + Display,
|
130
|
+
WFMachinesError: From<<<SM as StateMachine>::Event as TryFrom<HistoryEvent>>::Error>,
|
131
|
+
<SM as StateMachine>::Command: Debug + Display,
|
132
|
+
<SM as StateMachine>::State: Display,
|
133
|
+
<SM as StateMachine>::Error: Into<WFMachinesError> + 'static + Send + Sync,
|
134
|
+
{
|
135
|
+
fn kind(&self) -> MachineKind {
|
136
|
+
self.kind()
|
137
|
+
}
|
138
|
+
|
139
|
+
fn handle_command(
|
140
|
+
&mut self,
|
141
|
+
command_type: CommandType,
|
142
|
+
) -> Result<Vec<MachineResponse>, WFMachinesError> {
|
143
|
+
debug!(
|
144
|
+
command_type = ?command_type,
|
145
|
+
machine_name = %self.name(),
|
146
|
+
state = %self.state(),
|
147
|
+
"handling command"
|
148
|
+
);
|
149
|
+
if let Ok(converted_command) = command_type.try_into() {
|
150
|
+
match OnEventWrapper::on_event_mut(self, converted_command) {
|
151
|
+
Ok(c) => process_machine_commands(self, c, None),
|
152
|
+
Err(MachineError::InvalidTransition) => {
|
153
|
+
Err(WFMachinesError::Nondeterminism(format!(
|
154
|
+
"Unexpected command producing an invalid transition {:?} in state {}",
|
155
|
+
command_type,
|
156
|
+
self.state()
|
157
|
+
)))
|
158
|
+
}
|
159
|
+
Err(MachineError::Underlying(e)) => Err(e.into()),
|
160
|
+
}
|
161
|
+
} else {
|
162
|
+
Err(WFMachinesError::Nondeterminism(format!(
|
163
|
+
"Unexpected command {:?} generated by a {:?} machine",
|
164
|
+
command_type,
|
165
|
+
self.kind()
|
166
|
+
)))
|
167
|
+
}
|
168
|
+
}
|
169
|
+
|
170
|
+
fn matches_event(&self, event: &HistoryEvent) -> bool {
|
171
|
+
self.matches_event(event)
|
172
|
+
}
|
173
|
+
|
174
|
+
fn handle_event(
|
175
|
+
&mut self,
|
176
|
+
event: HistoryEvent,
|
177
|
+
has_next_event: bool,
|
178
|
+
) -> Result<Vec<MachineResponse>, WFMachinesError> {
|
179
|
+
trace!(
|
180
|
+
event = %event,
|
181
|
+
machine_name = %self.name(),
|
182
|
+
state = %self.state(),
|
183
|
+
"handling event"
|
184
|
+
);
|
185
|
+
let event_info = EventInfo {
|
186
|
+
event_id: event.event_id,
|
187
|
+
event_type: event.event_type(),
|
188
|
+
has_next_event,
|
189
|
+
};
|
190
|
+
let converted_event: <Self as StateMachine>::Event = event.try_into()?;
|
191
|
+
|
192
|
+
match OnEventWrapper::on_event_mut(self, converted_event) {
|
193
|
+
Ok(c) => process_machine_commands(self, c, Some(event_info)),
|
194
|
+
Err(MachineError::InvalidTransition) => Err(WFMachinesError::Fatal(format!(
|
195
|
+
"{} in state {} says the transition is invalid during event {:?}",
|
196
|
+
self.name(),
|
197
|
+
self.state(),
|
198
|
+
event_info
|
199
|
+
))),
|
200
|
+
Err(MachineError::Underlying(e)) => Err(e.into()),
|
201
|
+
}
|
202
|
+
}
|
203
|
+
|
204
|
+
fn cancel(&mut self) -> Result<Vec<MachineResponse>, WFMachinesError> {
|
205
|
+
let res = self.cancel();
|
206
|
+
res.map_err(|e| match e {
|
207
|
+
MachineError::InvalidTransition => WFMachinesError::Fatal(format!(
|
208
|
+
"Invalid transition while attempting to cancel {} in {}",
|
209
|
+
self.name(),
|
210
|
+
self.state(),
|
211
|
+
)),
|
212
|
+
MachineError::Underlying(e) => e.into(),
|
213
|
+
})
|
214
|
+
}
|
215
|
+
|
216
|
+
fn was_cancelled_before_sent_to_server(&self) -> bool {
|
217
|
+
self.was_cancelled_before_sent_to_server()
|
218
|
+
}
|
219
|
+
|
220
|
+
fn is_final_state(&self) -> bool {
|
221
|
+
self.has_reached_final_state()
|
222
|
+
}
|
223
|
+
}
|
224
|
+
|
225
|
+
fn process_machine_commands<SM>(
|
226
|
+
machine: &mut SM,
|
227
|
+
commands: Vec<SM::Command>,
|
228
|
+
event_info: Option<EventInfo>,
|
229
|
+
) -> Result<Vec<MachineResponse>, WFMachinesError>
|
230
|
+
where
|
231
|
+
SM: TemporalStateMachine + StateMachine + WFMachinesAdapter,
|
232
|
+
<SM as StateMachine>::Event: Display,
|
233
|
+
<SM as StateMachine>::Command: Debug + Display,
|
234
|
+
<SM as StateMachine>::State: Display,
|
235
|
+
{
|
236
|
+
if !commands.is_empty() {
|
237
|
+
debug!(commands=%commands.display(), state=%machine.state(),
|
238
|
+
machine_name=%TemporalStateMachine::kind(machine), "Machine produced commands");
|
239
|
+
}
|
240
|
+
let mut machine_responses = vec![];
|
241
|
+
for cmd in commands {
|
242
|
+
machine_responses.extend(machine.adapt_response(cmd, event_info)?);
|
243
|
+
}
|
244
|
+
Ok(machine_responses)
|
245
|
+
}
|
246
|
+
|
247
|
+
/// This trait exists to bridge [StateMachine]s and the [WorkflowMachines] instance. It has access
|
248
|
+
/// to the machine's concrete types while hiding those details from [WorkflowMachines]
|
249
|
+
trait WFMachinesAdapter: StateMachine {
|
250
|
+
/// A command that this [StateMachine] instance just produced, and maybe the event being
|
251
|
+
/// processed, perform any handling that needs inform the [WorkflowMachines] instance of some
|
252
|
+
/// action to be taken in response to that command.
|
253
|
+
fn adapt_response(
|
254
|
+
&self,
|
255
|
+
my_command: Self::Command,
|
256
|
+
event_info: Option<EventInfo>,
|
257
|
+
) -> Result<Vec<MachineResponse>, WFMachinesError>;
|
258
|
+
|
259
|
+
/// Returns true if this machine is compatible with the provided event. Provides a way to know
|
260
|
+
/// ahead of time if it's worth trying to call [TemporalStateMachine::handle_event] without
|
261
|
+
/// requiring mutable access.
|
262
|
+
fn matches_event(&self, event: &HistoryEvent) -> bool;
|
263
|
+
|
264
|
+
/// Allows robust identification of the type of machine
|
265
|
+
fn kind(&self) -> MachineKind;
|
266
|
+
}
|
267
|
+
|
268
|
+
#[derive(Debug, Copy, Clone)]
|
269
|
+
struct EventInfo {
|
270
|
+
event_id: i64,
|
271
|
+
event_type: EventType,
|
272
|
+
has_next_event: bool,
|
273
|
+
}
|
274
|
+
|
275
|
+
trait Cancellable: StateMachine {
|
276
|
+
/// Cancel the machine / the command represented by the machine.
|
277
|
+
///
|
278
|
+
/// # Panics
|
279
|
+
/// * If the machine is not cancellable. It's a logic error on our part to call it on such
|
280
|
+
/// machines.
|
281
|
+
fn cancel(&mut self) -> Result<Vec<MachineResponse>, MachineError<Self::Error>> {
|
282
|
+
// It's a logic error on our part if this is ever called on a machine that can't actually
|
283
|
+
// be cancelled
|
284
|
+
panic!("Machine {} cannot be cancelled", self.name())
|
285
|
+
}
|
286
|
+
|
287
|
+
/// Should return true if the command was cancelled before we sent it to the server
|
288
|
+
fn was_cancelled_before_sent_to_server(&self) -> bool {
|
289
|
+
false
|
290
|
+
}
|
291
|
+
}
|
292
|
+
|
293
|
+
/// We need to wrap calls to [StateMachine::on_event_mut] to track coverage, or anything else
|
294
|
+
/// we'd like to do on every call.
|
295
|
+
pub(crate) trait OnEventWrapper: StateMachine
|
296
|
+
where
|
297
|
+
<Self as StateMachine>::State: Display,
|
298
|
+
<Self as StateMachine>::Event: Display,
|
299
|
+
Self: Clone,
|
300
|
+
{
|
301
|
+
fn on_event_mut(
|
302
|
+
&mut self,
|
303
|
+
event: Self::Event,
|
304
|
+
) -> Result<Vec<Self::Command>, MachineError<Self::Error>> {
|
305
|
+
#[cfg(test)]
|
306
|
+
let from_state = self.state().to_string();
|
307
|
+
#[cfg(test)]
|
308
|
+
let converted_event_str = event.to_string();
|
309
|
+
|
310
|
+
let res = StateMachine::on_event_mut(self, event);
|
311
|
+
if res.is_ok() {
|
312
|
+
#[cfg(test)]
|
313
|
+
add_coverage(
|
314
|
+
self.name().to_owned(),
|
315
|
+
from_state,
|
316
|
+
self.state().to_string(),
|
317
|
+
converted_event_str,
|
318
|
+
);
|
319
|
+
}
|
320
|
+
res
|
321
|
+
}
|
322
|
+
}
|
323
|
+
|
324
|
+
impl<SM> OnEventWrapper for SM
|
325
|
+
where
|
326
|
+
SM: StateMachine,
|
327
|
+
<Self as StateMachine>::State: Display,
|
328
|
+
<Self as StateMachine>::Event: Display,
|
329
|
+
Self: Clone,
|
330
|
+
{
|
331
|
+
}
|
332
|
+
|
333
|
+
struct NewMachineWithCommand {
|
334
|
+
command: ProtoCommand,
|
335
|
+
machine: Machines,
|
336
|
+
}
|
337
|
+
|
338
|
+
impl Debug for dyn TemporalStateMachine {
|
339
|
+
fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
|
340
|
+
std::fmt::Display::fmt(&self.kind(), f)
|
341
|
+
}
|
342
|
+
}
|
@@ -0,0 +1,127 @@
|
|
1
|
+
use rustfsm::{fsm, TransitionResult};
|
2
|
+
|
3
|
+
fsm! {
|
4
|
+
pub(super) name MutableSideEffectMachine; command MutableSideEffectCommand; error MutableSideEffectMachineError;
|
5
|
+
|
6
|
+
Created --(CheckExecutionState, on_check_execution_state) --> Replaying;
|
7
|
+
Created --(CheckExecutionState, on_check_execution_state) --> Executing;
|
8
|
+
|
9
|
+
Executing --(Schedule, on_schedule) --> MarkerCommandCreated;
|
10
|
+
Executing --(Schedule, on_schedule) --> Skipped;
|
11
|
+
|
12
|
+
MarkerCommandCreated --(CommandRecordMarker, on_command_record_marker) --> ResultNotified;
|
13
|
+
|
14
|
+
MarkerCommandCreatedReplaying --(CommandRecordMarker) --> ResultNotifiedReplaying;
|
15
|
+
|
16
|
+
Replaying --(Schedule, on_schedule) --> MarkerCommandCreatedReplaying;
|
17
|
+
|
18
|
+
ResultNotified --(MarkerRecorded, on_marker_recorded) --> MarkerCommandRecorded;
|
19
|
+
|
20
|
+
ResultNotifiedReplaying --(NonMatchingEvent, on_non_matching_event) --> SkippedNotified;
|
21
|
+
ResultNotifiedReplaying --(MarkerRecorded, on_marker_recorded) --> MarkerCommandRecorded;
|
22
|
+
ResultNotifiedReplaying --(MarkerRecorded, on_marker_recorded) --> SkippedNotified;
|
23
|
+
|
24
|
+
Skipped --(CommandRecordMarker, on_command_record_marker) --> SkippedNotified;
|
25
|
+
}
|
26
|
+
|
27
|
+
#[derive(thiserror::Error, Debug)]
|
28
|
+
pub(super) enum MutableSideEffectMachineError {}
|
29
|
+
|
30
|
+
pub(super) enum MutableSideEffectCommand {}
|
31
|
+
|
32
|
+
#[derive(Default, Clone)]
|
33
|
+
pub(super) struct Created {}
|
34
|
+
|
35
|
+
impl Created {
|
36
|
+
pub(super) fn on_check_execution_state(
|
37
|
+
self,
|
38
|
+
) -> MutableSideEffectMachineTransition<ReplayingOrExecuting> {
|
39
|
+
unimplemented!()
|
40
|
+
}
|
41
|
+
}
|
42
|
+
|
43
|
+
#[derive(Default, Clone)]
|
44
|
+
pub(super) struct Executing {}
|
45
|
+
|
46
|
+
impl Executing {
|
47
|
+
pub(super) fn on_schedule(
|
48
|
+
self,
|
49
|
+
) -> MutableSideEffectMachineTransition<MarkerCommandCreatedOrSkipped> {
|
50
|
+
unimplemented!()
|
51
|
+
}
|
52
|
+
}
|
53
|
+
|
54
|
+
#[derive(Default, Clone)]
|
55
|
+
pub(super) struct MarkerCommandCreated {}
|
56
|
+
|
57
|
+
impl MarkerCommandCreated {
|
58
|
+
pub(super) fn on_command_record_marker(
|
59
|
+
self,
|
60
|
+
) -> MutableSideEffectMachineTransition<ResultNotified> {
|
61
|
+
unimplemented!()
|
62
|
+
}
|
63
|
+
}
|
64
|
+
|
65
|
+
#[derive(Default, Clone)]
|
66
|
+
pub(super) struct MarkerCommandCreatedReplaying {}
|
67
|
+
|
68
|
+
#[derive(Default, Clone)]
|
69
|
+
pub(super) struct MarkerCommandRecorded {}
|
70
|
+
|
71
|
+
#[derive(Default, Clone)]
|
72
|
+
pub(super) struct Replaying {}
|
73
|
+
|
74
|
+
impl Replaying {
|
75
|
+
pub(super) fn on_schedule(
|
76
|
+
self,
|
77
|
+
) -> MutableSideEffectMachineTransition<MarkerCommandCreatedReplaying> {
|
78
|
+
unimplemented!()
|
79
|
+
}
|
80
|
+
}
|
81
|
+
|
82
|
+
#[derive(Default, Clone)]
|
83
|
+
pub(super) struct ResultNotified {}
|
84
|
+
|
85
|
+
impl ResultNotified {
|
86
|
+
pub(super) fn on_marker_recorded(
|
87
|
+
self,
|
88
|
+
) -> MutableSideEffectMachineTransition<MarkerCommandRecorded> {
|
89
|
+
unimplemented!()
|
90
|
+
}
|
91
|
+
}
|
92
|
+
|
93
|
+
#[derive(Default, Clone)]
|
94
|
+
pub(super) struct ResultNotifiedReplaying {}
|
95
|
+
|
96
|
+
impl ResultNotifiedReplaying {
|
97
|
+
pub(super) fn on_non_matching_event(
|
98
|
+
self,
|
99
|
+
) -> MutableSideEffectMachineTransition<SkippedNotified> {
|
100
|
+
unimplemented!()
|
101
|
+
}
|
102
|
+
pub(super) fn on_marker_recorded(
|
103
|
+
self,
|
104
|
+
) -> MutableSideEffectMachineTransition<MarkerCommandRecordedOrSkippedNotified> {
|
105
|
+
unimplemented!()
|
106
|
+
}
|
107
|
+
}
|
108
|
+
|
109
|
+
impl From<MarkerCommandCreatedReplaying> for ResultNotifiedReplaying {
|
110
|
+
fn from(_: MarkerCommandCreatedReplaying) -> Self {
|
111
|
+
Self::default()
|
112
|
+
}
|
113
|
+
}
|
114
|
+
|
115
|
+
#[derive(Default, Clone)]
|
116
|
+
pub(super) struct Skipped {}
|
117
|
+
|
118
|
+
impl Skipped {
|
119
|
+
pub(super) fn on_command_record_marker(
|
120
|
+
self,
|
121
|
+
) -> MutableSideEffectMachineTransition<SkippedNotified> {
|
122
|
+
unimplemented!()
|
123
|
+
}
|
124
|
+
}
|
125
|
+
|
126
|
+
#[derive(Default, Clone)]
|
127
|
+
pub(super) struct SkippedNotified {}
|